Python に問題があり、string.format()
Unicode 文字列を渡すのに問題があります。これはこの古い質問に似ていますが、私の場合、テスト コードがlogging.info()
呼び出しではなく印刷で爆発する点が異なります。同じ Unicode 文字列オブジェクトをロギング ハンドラに渡すと、問題なく動作します。
これは、古い%
フォーマットと同様に失敗しますstring.format()
。問題が文字列オブジェクトであることを確認し、印刷が端末とうまくやり取りしないようにするために、印刷する前にフォーマットされた文字列を変数に割り当ててみました。
def unicode_test():
byte_string = '\xc3\xb4'
unicode_string = unicode(byte_string, "utf-8")
print "unicode object type: {}".format(type(unicode_string))
output_string = "printed unicode object: {}".format(unicode_string)
print output_string
if __name__ == '__main__':
unicode_test()
文字列オブジェクトは、ASCII を取得していると想定しているようです。
% python -V
Python 2.7.2
% python ./unicodetest.py
unicode object type: <type 'unicode'>
Traceback (most recent call last):
File "./unicodetest.py", line 10, in <module>
unicode_test()
File "./unicodetest.py", line 6, in unicode_test
output_string = "printed unicode object: {}".format(unicode_string)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf4' in position 0: ordinal not in range(128)
Unicode としてキャストしようoutput_string
としても、違いはありません。
output_string = u"印刷された Unicode オブジェクト: {}".format(unicode_string)
ここで何か不足していますか?文字列オブジェクトのドキュメントは、私が使用しようとしているときにこれが機能するはずであることを明確に示しています。