>>> text = u'\u0410\u0430\u0411\u0431'
>>> print text
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
ordinal not in range(128)
>>> print text.encode('utf8')
АаБб
>>> print u'\u0437'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0437' in position 0: character maps to <undefined>
我不清楚
some_text
是从哪里来的(你删掉了代码的那一部分),所以我不知道为什么它是作为字符列表而不是字符串打印的。但是您应该知道,在默认情况下,Python在将字符串打印到终端时会尝试将其编码为ASCII。如果希望将它们编码到其他编码系统中,可以显式地执行以下操作:
u'\uNNNN'
是字符串文本的ASCII安全版本u'з'
:但是,只有当您的控制台支持要打印的字符时,此选项才会正确显示。在西欧Windows安装的控制台上尝试上述操作失败:
因为让Windows控制台输出Unicode是很棘手的,Python 2的
repr
函数总是选择ASCII安全文本版本。您的
print
语句正在输出repr
版本,而不是直接打印字符,因为您将它们放在字符列表中而不是字符串中。如果对列表中的每个成员都进行了print
,则将直接获得字符输出,而不表示为u'...'
字符串文本。看起来
some_text
是unicode对象的列表。当您打印这样的列表时,它会打印列表中元素的reprs
。因此,请尝试:join方法将
some_text
中的元素与元素之间的空空间u''
连接起来。结果是一个unicode对象。相关问题 更多 >
编程相关推荐