如何在输出中获得西里尔字母,Python?

2024-09-28 05:21:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎样才能得到西里尔文而不是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']


Tags: 密码readrawdefaswithopenfilename
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')
АаБб

u'\uNNNN'是字符串文本的ASCII安全版本u'з'

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

看起来some_text是unicode对象的列表。当您打印这样的列表时,它会打印列表中元素的reprs。因此,请尝试:

print(u''.join(some_text))

join方法将some_text中的元素与元素之间的空空间u''连接起来。结果是一个unicode对象。

相关问题 更多 >

    热门问题