为什么python将Kurdich字符转换为UTF-8字符?

时间:2016-01-01 21:09:29

标签: python utf-8 non-ascii-characters

我试图获取文本文件的内容并将其映射到json文件,但我注意到python自动将库尔德(sorani)文本转换为UTF-8文字。有人可以解释为什么python会这样做以及如何阻止转换?

您可以使用以下代码进行测试:

def readText():
    # test.txt contains kurdish sorani characters (an article)
    # Sorani example: ڕۆژتان باش بەڕێزان. من ناوم ڕەنجە. 
    with open('test.txt', 'r') as context:
        data = context.readlines()
        return data
print(readText())

我在Ubuntu 14.x上运行python 2.x. Python2.x就是这样做的! Python 3.x不会转换它并且工作得很好。

2 个答案:

答案 0 :(得分:0)

您在调用readlines时看到repr输出,其中返回列表并且列表显示数据的repr表示,一旦您实际打印字符串本身会看到实际的str输出,你也在使用python2:

In [11]: out = readText()

In [12]: print out
['\xda\x95\xdb\x86\xda\x98\xd8\xaa\xd8\xa7\xd9\x86 \xd8\xa8\xd8\xa7\xd8\xb4 \xd8\xa8\xdb\x95\xda\x95\xdb\x8e\xd8\xb2\xd8\xa7\xd9\x86. \xd9\x85\xd9\x86 \xd9\x86\xd8\xa7\xd9\x88\xd9\x85 \xda\x95\xdb\x95\xd9\x86\xd8\xac\xdb\x95. ']

In [13]: print out[0]
ڕۆژتان باش بەڕێزان. من ناوم ڕەنجە. 

答案 1 :(得分:-1)

我要在这里采取刺,并猜测你正在某种类型的终端中读取输出,当Python写入终端时,它试图以ASCII格式显示。

如果您将PYTHONIOENCODING环境变量设置为UTF-8,这有时可以解决问题 - 它也取决于其他变量。

因此,如果您使用的是类UNIX系统,请在终端中尝试:export PYTHONIOENCODING=UTF-8

或者,对于Windows,set PYTHONIOENCODING=UTF-8

然后,再次尝试运行脚本,看看是否打印了正确的字符。

可在此处找到更多信息:How to print UTF-8 Encoded Text to the console in Python3