将 Pandas DataFrame 写入 Unicode 文本文件时出现问题

3
我已经编写了一个程序来生成一个Unicode文本文件,以便上传到一个网站。我已经使用Microsoft Access成功地原型化了这个特定的文件,并注意到如果将其编码为utf-8文件,则该网站会拒绝该文件,因为它不是一个Unicode文本文件。从文本编辑器(使用Windows记事本)中,如果我仅使用下拉框中的Unicode编码保存文件,则我要上传到的网站可以很好地接受该文件。
因此,在这种情况下,我编写了一个程序来使用pandas和DataFrames自动生成该文件。我的程序的最后一行将DataFrame导出到一个文本文件中:
 coa1.to_csv('0000-2951-test.txt',index=False, sep='\t', encoding = 'utf-8')

这将生成正确的文件,但是当我在记事本中打开它时,编码方式显示为ANSI而不是unicode。如何将我的DataFrame写入unicode文件?当记事本没有任何附加限定符时,它所指的Unicode是哪种Unicode?

1个回答

5
"Unicode" 不是一种特定的编码,而是一组编码方式。它可以是utf-8、utf-16、utf-32等。在Windows系统中,"unicode"通常意味着utf-16,因此这个网站可能需要使用utf-16编码格式。尝试将你的csv文件编码为utf-16格式,然后检查是否可以在记事本和这个网站上正确显示"unicode"。 更详细的解释
coa1.to_csv('0000-2951-test.txt',index=False, sep='\t', encoding = 'utf-16')

编辑:建议您在原型设计中使用更好的文本编辑器,而不是Windows记事本,这样可以精确设置编码。我建议使用Sublime或Notepad++。


系统已经接受了该文件,但是每行数据的末尾现在有很多亚洲字符,这被网站识别为不正确的格式。 - CultureQuant
好的。所以我使用了Notepad++,它确认我的原型文件编码为UCS-2LE,但是如果我使用UTF-16LE进行编码,使用Python、Pandas和DataFrames生成的新文件在每行末尾添加了一堆垃圾。 - CultureQuant
当您使用UTF-8进行编码时,就不会添加任何垃圾字符了吗? - bpgergo
没错:以UTF-8结尾,我就不会得到任何垃圾字符。但是,我需要接受该文件的网站却无法将其识别为Unicode文件并拒绝了该文件。@bpgergo - CultureQuant
这很奇怪,我不明白这是怎么发生的。为了澄清问题,我会让pandas使用utf-8编码文件。然后,我会使用标准转换程序iconv将其从utf-8转换为utf-16,并查看它是否与pandas utf-16版本相同,以及它是否包含垃圾并被网站接受。iconv -f utf-8 -t utf-16 utf8file.txt > utf16file.txt - bpgergo
在使用iconv包时遇到了一些问题,但是将以下代码块添加到我的代码中成功地消除了每行末尾的垃圾字符,并且网站将该文件识别为Unicode文件: import codecs with codecs.open('0000-2951-test.txt', "r", "utf-8") as sourceFile: with codecs.open('2951.txt', "w", "utf-16") as targetFile: while True: contents = sourceFile.read() if not contents: break targetFile.write(contents) 感谢@bpgergo帮我找到解决方案。 - CultureQuant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接