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

4

如何获取西里尔文,而不是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']

注:此为Python代码,不进行翻译。
3个回答

4

看起来some_text是一个Unicode对象列表。当你打印这样的列表时,它会打印出列表中元素的reprs。因此,请尝试以下方法:

print(u''.join(some_text))

join 方法将 some_text 中的元素用空格 u'' 连接起来,生成一个 Unicode 对象。


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')
АаБб

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'...'字符串字面量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接