我无法做到这一点。我已经在其中编码了字符的CSV文件(我制作了一个较小的CSV文件进行测试,但原件更长):
Isten H \ xe1ta M \ xf6g \ xf6tt
Sigur R \ xf3s
\ xd3lafur
我无法解码这些字符串。我尝试通过简单的读取行来解码它,然后执行line.decode(' latin1'),但它似乎没有用。当我查看原始字符串时,我注意到字符被额外的反斜杠转义。所以,我尝试在进行解码之前首先对原始字符串执行unicode-escape;这似乎也不起作用。字符串保持原样(虽然在原始字符串中删除了额外的反斜杠)。
当我使用示例项对手动列表进行硬编码时,解码工作正常,我得到了正确的字符。
所以,当我从CSV文件中读取它时,我只是不能让它工作。任何人都知道哪里出错了?
答案 0 :(得分:1)
字符在内存和文件中具有不同的表示形式。字符串可以通过多种方式进行编码,包括latin-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 :(得分:-1)
>>> mystring = 'Sigur R\xf3s'
>>> print mystring
Sigur R�s
>>> print mystring.decode('latin-1')
Sigur Rós
似乎在python 2.7上工作正常,你能展示一些代码及其产生的错误吗?