我如何获得西里尔而不是u'...
代码就像这样
def openfile(filename):
with codecs.open(filename, encoding="utf-8") as F:
raw = F.read()
do stuff...
print some_text
打印
>>>[u'.', u',', u':', u'\u0432', u'<', u'>', u'(', u')', u'\u0437', u'\u0456']
答案 0 :(得分:5)
看起来some_text
是一个unicode对象列表。当您打印这样的列表时,它会打印列表中的reprs
个元素。所以请尝试:
print(u''.join(some_text))
join方法将some_text
的元素与元素之间的空格u''
连接起来。结果是一个unicode对象。
答案 1 :(得分:3)
我不清楚some_text
来自哪里(你删除了那段代码),所以我不知道它为什么打印成字符列表而不是字符串。
但是你应该知道,默认情况下,当你将字符串打印到终端时,Python会尝试将字符串编码为ASCII。如果您希望它们在其他编码系统中进行编码,您可以明确地执行此操作:
>>> 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')
АаБб
答案 2 :(得分:0)
u'\uNNNN'
是字符串文字u'з'
的ASCII安全版本:
>>> print u'\u0437'
з
但是,如果您的控制台支持您要打印的字符,则此选项仅适用于您。在西欧Windows安装的控制台上尝试上述操作失败:
>>> 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>
因为让Windows控制台输出Unicode很棘手,所以Python 2的repr
函数总是选择ASCII安全文字版本。
您的print
语句正在输出repr
版本而不是直接打印字符,因为您已将它们放在字符列表中而不是字符串中。如果您对列表的每个成员执行了print
,那么您将直接获得字符输出,而不是表示为u'...'
字符串文字。