答えはありません。ただのテストです (ただし、Unix では):
>>> import locale, datetime
>>> locale.setlocale(locale.LC_ALL, "de_de")
>>> datetime.datetime.strptime("März 2012", "%B %Y")
datetime.datetime(2012, 3, 1, 0, 0)
上記は期待どおりに機能します。入力として Unicode をシミュレートするようになりました - März にはLATIN SMALL LETTER A WITH DIAERESISが含まれています。
>>> datetime.datetime.strptime("M\u00E4rz 2012", "%B %Y"))
...
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' ...
組み込みの unicode 関数を使用しても同じことが実現できます。
>>> datetime.datetime.strptime(unicode("März 2012", "utf-8"), "%B %Y")
...
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' ....
適切なエンコーディングを試してください:
>>> datetime.datetime.strptime(u"M\u00E4rz 2012".encode('utf-8'), "%B %Y")
datetime.datetime(2012, 3, 1, 0, 0)
繰り返しますが、これは Windows ではないため、実際には答えではありませんが、ヒントが含まれている可能性があります。
もう少し調査するために、データの外部ソースを扱うシナリオ (この例では JSON を使用し、XML では YMMV を使用):
適切な JSON エンコーダーがユニコードを提供すると思います。RFC4627はそれを示唆しているようです:
任意の文字をエスケープできます。文字が基本多言語面 (U+0000 から U+FFFF まで) にある場合、6 文字のシーケンスとして表すことができます。文字のコードポイント。16 進文字の A から F は、大文字または小文字にすることができます。
したがって、Pythonでそれをシミュレートするには(誰もJSONをそのように解析しないでしょう。これは単なるシミュレーションです):
>>> import json
>>> s = json.dumps({"date" : "März 2012"}).split(":")[1].replace(
'"', "").replace("}", "").strip().decode("unicode_escape")
>>> # and sure enough ...
>>> datetime.datetime.strptime(s, "%B %Y")
...
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4 ...
>>> # and again, with the right encoding ...
>>> datetime.datetime.strptime(s.encode("utf-8"), "%B %Y")
datetime.datetime(2012, 3, 1, 0, 0)