如何获取西里尔文,而不是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']
看起来some_text
是一个Unicode对象列表。当你打印这样的列表时,它会打印出列表中元素的reprs
。因此,请尝试以下方法:
print(u''.join(some_text))
join 方法将 some_text
中的元素用空格 u''
连接起来,生成一个 Unicode 对象。
我不清楚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')
АаБб
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>
repr
函数总是选择ASCII安全字面值版本。print
语句输出repr
版本而不是直接打印字符,因为您将它们放在字符列表中而不是字符串中。如果您对列表中的每个成员进行print
,则会直接输出字符,而不是表示为u'...'
字符串字面量。