Unicode CSV Python
我没办法把这个弄对。我有一个CSV文件,其中已经对字符进行了编码(我制作了一个较小的CSV文件进行测试,但原始文件要长得多): Isten H\xe1ta M\xf6g\xf6ttUnicode CSV Python,python,csv,unicode,Python,Csv,Unicode,我没办法把这个弄对。我有一个CSV文件,其中已经对字符进行了编码(我制作了一个较小的CSV文件进行测试,但原始文件要长得多): Isten H\xe1ta M\xf6g\xf6tt Sigur R\xf3s \xd3lafur 我无法解码这些字符串。我试着通过简单的读一行来解码它,然后执行line.decode('latin1'),但它似乎不起作用。当我查看原始字符串时,我注意到字符被一个额外的反斜杠转义。因此,在解码之前,我尝试先对原始字符串进行unicode转义;这似乎也不起作用。字符串保持
Sigur R\xf3s
\xd3lafur 我无法解码这些字符串。我试着通过简单的读一行来解码它,然后执行line.decode('latin1'),但它似乎不起作用。当我查看原始字符串时,我注意到字符被一个额外的反斜杠转义。因此,在解码之前,我尝试先对原始字符串进行unicode转义;这似乎也不起作用。字符串保持原样(在原始字符串中删除了额外的反斜杠) 当我用示例项硬编码一个手动列表时,解码工作正常,我得到了正确的字符 所以,当我从CSV文件中读取它时,我才无法让它工作。有人知道哪里出了问题吗
>>> mystring = 'Sigur R\xf3s'
>>> print mystring
Sigur R�s
>>> print mystring.decode('latin-1')
Sigur Rós
在Python2.7上似乎工作得很好,您能展示一些代码和它产生的错误吗
在Python2.7上似乎工作得很好,能否显示一些代码及其生成的错误?字符在内存和文件中有不同的表示形式。字符串可以通过多种方式编码,包括
拉丁-1
编码或utf-8
,但在本例中,如果我们看到一个文本\xf6
,我们得到的是一个已转义的字符串。我们可以通过破解逃逸来解决这个问题
>>> print open('data.csv').readline().decode('string_escape')
Isten H�ta M�g�tt
但这只让我们走了一半,我们仍然被编码。现在是双重解码
>>> print open('data.csv').readline().decode('string_escape').decode('latin1')
Isten Háta Mögött
明白了!问题在于写入文件的内容。字符在内存和文件中有不同的表示形式。字符串可以通过多种方式编码,包括
拉丁-1
编码或utf-8
,但在本例中,如果我们看到一个文本\xf6
,我们得到的是一个已转义的字符串。我们可以通过破解逃逸来解决这个问题
>>> print open('data.csv').readline().decode('string_escape')
Isten H�ta M�g�tt
但这只让我们走了一半,我们仍然被编码。现在是双重解码
>>> print open('data.csv').readline().decode('string_escape').decode('latin1')
Isten Háta Mögött
明白了!问题在于写入文件的内容。这是python 2.x还是3.x?这是python 2.7,您最初是如何在文件中获得该文本的?它是双重编码的,不是我自己创造的。试图找出如何从中获得正确的文本。为什么当我手动将其放入字符串/列表中时效果很好,但当我从CSV中读取它时却不起作用?如果在python脚本中放入
foo=“Isten H\xe1ta M\xf6g\xf6tt”
,python将以转换bar=“one\ntwo\ntree\n”
中的新行的方式对其进行替换。如果将完全相同的文本放在csv文件中,python编译器将不会解析该文本,也不会进行任何删除。这就是string\u escape
编码的目的。似乎有人使用python打印字符串列表,然后将它们复制/粘贴到文件中。不要那样做!这是Python2.x还是3.x?这是Python2.7,您首先是如何在文件中获得该文本的?它是双重编码的,不是我自己创造的。试图找出如何从中获得正确的文本。为什么当我手动将其放入字符串/列表中时效果很好,但当我从CSV中读取它时却不起作用?如果在python脚本中放入foo=“Isten H\xe1ta M\xf6g\xf6tt”
,python将以转换bar=“one\ntwo\ntree\n”
中的新行的方式对其进行替换。如果将完全相同的文本放在csv文件中,python编译器将不会解析该文本,也不会进行任何删除。这就是string\u escape
编码的目的。似乎有人使用python打印字符串列表,然后将它们复制/粘贴到文件中。不要那样做!这就是我尝试过的,然后它就成功了。从CSV上阅读时,我无法让它工作。这是我尝试过的,然后它就工作了。从CSV读取时,我无法使其工作