我正在解析python中的一长串波斯语,并按照以下方式打开它:
fp = codecs.open(f+i, 'r', encoding='utf-8').readlines()
和使用
print(line[1])
但它不是打印出可读的波斯语,而是在终端输出这样的东西。
اطÙ
اعâرساÙ
在网页上,它输出正常。
有什么问题?谢谢
你这里有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+0627 ARABIC LETTER ALEFØ·
- > ط
U+0637 ARABIC LETTER TAHع
- > ع
U+0639 ARABIC LETTER AINر
- > ر
U+0631 ARABIC LETTER REHس
- > س
U+0633 ARABIC LETTER SEENÙ
角色是U + 640到U + 0660范围内任何东西的Mojibake起点;我们在这里看不到两次出现的第二个字节。同样的â
角色; CP1252中的第二个字节无法打印,因此再次丢失。
总的来说,我可以恢复的是:
>>> print u'اط - اع - رسا'.encode('cp1252').decode('utf8')
اط - اع - رسا