我在使用 Pythonstring.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)
尝试转换output_string
为 Unicode 没有任何区别。
output_string = u"打印的 unicode 对象:{}".format(unicode_string)
我在这里错过了什么吗?字符串对象的文档似乎很清楚,这应该可以在我尝试使用它时起作用。