我有Unicode字符串(带有日文字符)我想写入CSV文件。
但是,BOM似乎没有正确写入,就像第一行中的字符串""
一样。这导致Excel无法正确显示日文字符。使用Notepad ++打开CSV时,字符显示正确。
fileObj = codecs.open(filename,"w",'utf-8')
fileObj.write(codecs.BOM_UTF8)
c = u';'
for s in stringsToWrite:
line = e.someUnicodeString
fileObj.write(line)
fileObj.close()
答案 0 :(得分:6)
fileObj = codecs.open(filename,"w",'utf-8')
好的,你有一个Unicode输出流。
fileObj.write(codecs.BOM_UTF8)
BOM_UTF8是一个字节序列,而不是您希望写入Unicode流的Unicode字符串。 Python将使用某些编码自动从字节转换为Unicode,这可能不是正确的编码。如果默认编码是Windows代码页1252而不是UTF-8,那么您将有效地对BOM进行双重编码,它将作为
的UTF-8编码。
建议将BOM写为Unicode字符:
fileObj.write(u'\uFEFF')
InternetSeriousBusiness写道:
无论如何,不鼓励使用UTF-8 BOM吗? -
是的,在大多数情况下,UTF-8虚假BOM很大程度上是一场灾难,但需要让Excel的charset猜测才能获得UTF-8。不幸的是它在Excel for Mac中不起作用。另一种可能的方法可能是使用UTF-16。
答案 1 :(得分:0)
您复制的字符串是UTF-8 BOM。所以你的问题不在你的python代码中,而在其他地方。