【问题标题】:Python print to terminal shell unicodePython打印到终端shell unicode
【发布时间】:2014-06-18 09:44:47
【问题描述】:

我在 python 中解析一长串波斯语,并像这样打开它:

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

并使用

print(line[1])

但不是打印出可读的波斯语,而是在终端中输出类似这样的内容。

اطÙ
     Ø§Ø¹âØ±Ø³Ø§Ù

在网页上,它输出正常。

它有什么问题?谢谢

【问题讨论】:

  • 你用的是什么终端?
  • import sys; sys.stdout.encoding 显示什么?这对您的控制台/终端是否正确?
  • @merlin2011 我正在使用 SSH 安全外壳
  • 这看起来像是 UTF-8 的 ISO-8851-1 Mojibake。
  • @MartijnPieters 我之前在以前的 python 脚本中使用过它并且它有效,所以我不确定为什么这次它在同一个终端上对我不起作用

标签: python encoding utf-8 codec mojibake


【解决方案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+640 到 U+0660 范围内任何内容的 Mojibake 起点;我们在这里看不到两次出现的第二个字节。 â 字符同上;第二个字节在 CP1252 中无法打印,因此再次丢失。

总的来说,我能恢复的是:

>>> print u'اط - اع - رسا'.encode('cp1252').decode('utf8')
اط - اع - رسا

【讨论】:

  • 谢谢,如果你不让我知道,我就不会知道这件事。我将不得不对此进行更多研究,然后再与您联系。也许用我的外壳做一些事情......会让你知道!
  • @user3325170:它是 CP1252,Windows Latin-1 的近似代码页
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2015-11-04
  • 1970-01-01
  • 2013-06-27
  • 2013-09-14
相关资源
最近更新 更多