在Python中打印阿拉伯语Unicode字符串(x,y)

0 投票
1 回答
2718 浏览
提问于 2025-04-17 17:36

我有一个阿拉伯语的unicode字符串,我想在Python中打印出来(我在Windows 7上使用Python(x,y)),但是我只能看到unicode的表示形式,无法正常打印。

这个字符串是这样定义的:

ss = u'\u0647\u0630\u0627 \u0647\u0648 \u0627\u0644\u062d\u0644 \u0627\u0644\u0648\u062d\u064a\u062f \u0644\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062a\u064a \u0646\u0648\u0627\u062c\u0647\u0647\u0627'

它应该显示成这样:“هذا هو الحل الوحيد للمشكلة التي نواجهها”

当我尝试用print打印时,出现了以下错误:

print ss
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\encodings\cp1252.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

当我用cp1256编码这个字符串(这是Windows阿拉伯语的编码)时,显示的结果也是错误的:

print ss.encode('cp1256')
åÐÇ åæ ÇáÍá ÇáæÍíÏ ááãÔßáÉ ÇáÊí äæÇÌååÇ

我查看了这里关于在Windows上用Python打印unicode的几个问题,但似乎没有一个能解决我的问题。

有没有什么好的建议呢?

谢谢。

更新:我正在使用Spyder IDE(和Python(x,y)一起在Windows 7上使用)。

更新2:我已经尝试了“重复”问题中的所有解决方案,但都没有成功。

1 个回答

1

你的控制台现在设置为显示1252编码(拉丁1),这个编码确实无法处理你输入的字符。你需要把控制台换成一个可以显示这些字符的编码。

你可以换成1256编码:

chcp 1256

或者换成65001编码(UTF-8编码),这个编码应该可以处理所有的Unicode字符。不过,你可能需要更换控制台使用的字体;据说Lucida Sans字体可以显示大部分Unicode字符。

撰写回答