【问题标题】:UTF8 Python BOM [duplicate]UTF8 Python BOM [重复]
【发布时间】:2012-08-24 04:58:45
【问题描述】:

可能重复:
Write to utf-8 file in python

我有想要写入 CSV 文件的 Unicode 字符串(带有日文字符)。 但是,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()

【问题讨论】:

  • "" BOM,当错误地解释为 Latin-1 时。你如何检查结果?此外,众所周知,Excel 的编码很烂。
  • 不鼓励使用 UTF-8 BOM 吗?
  • @InternetSeriousBusiness 我确实不鼓励这样做,但微软不会听我的。
  • Excel 是一种痛苦。您是对的,您确实需要指定 BOM,但是,默认情况下,Excel 会以您机器的默认编码(几乎肯定不是 utf8)加载文件。您必须导入它并手动选择正确的编码 UTF8,并使用 BOM。

标签: python unicode utf-8 byte-order-mark


【解决方案1】:
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 faux-BOM 在大多数情况下很大程度上是一场灾难,但需要让 Excel 的字符集猜测来选择 UTF-8。不幸的是,它在 Excel for Mac 中不起作用。另一种可能的方法是使用 UTF-16。

【讨论】:

    【解决方案2】:

    您复制的字符串 UTF-8 BOM。所以你的问题不在你的 python 代码中,而是在其他地方。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2023-01-31
      • 1970-01-01
      • 2023-04-02
      • 2013-07-15
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      相关资源
      最近更新 更多