如何在输出中获得Cyrillic,Python?

时间:2010-11-08 19:57:23

标签: python utf-8 encode

我如何获得西里尔而不是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']

3 个答案:

答案 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'...'字符串文字。