Python打印到终端shell unicode

问题描述 投票:2回答:1

我正在解析python中的一长串波斯语,并按照以下方式打开它:

fp = codecs.open(f+i, 'r', encoding='utf-8').readlines()

和使用

print(line[1])

但它不是打印出可读的波斯语,而是在终端输出这样的东西。

اطÙ
     اعâرساÙ

在网页上,它输出正常。

有什么问题?谢谢

python encoding utf-8 codec mojibake
1个回答
4
投票

你这里有CP1252 Mojibake。第一个字符是代码点U+0627 ARABIC LETTER ALEF,编码为UTF-8,但后来解释为CP1252

>>> print u'\u0627'.encode('utf8').decode('cp1252')
ا

您的SSH shell在某处配置错误;远程shell认为您使用的是UTF-8,而本地打印的UTF-8字节正在打印,就好像它们是CP1252字节一样。

我能解读的是:

Ù角色是U + 640到U + 0660范围内任何东西的Mojibake起点;我们在这里看不到两次出现的第二个字节。同样的â角色; CP1252中的第二个字节无法打印,因此再次丢失。

总的来说,我可以恢复的是:

>>> print u'اط - اع - رسا'.encode('cp1252').decode('utf8')
اط - اع - رسا
© www.soinside.com 2019 - 2024. All rights reserved.