【问题标题】:Python Writing a UCS-2 Little Endian (utf-16-le) file with BOM [duplicate]Python使用BOM编写UCS-2 Little Endian(utf-16-le)文件[重复]
【发布时间】:2013-08-16 20:33:30
【问题描述】:

我有一个第 3 方应用程序,它读取 utf-16-le 的 Unicode 文件。出于某种原因,它必须有一个 BOM,否则它不会读取文件。

我在编写这种编码的输出文件时遇到了很多困难,所以我想我会在这里为可能遇到相同问题的其他人记录我的解决方案。

import codecs

mytext = "Help me"

with open("c:\\temp\\myFile.txt", 'w') as f:
    f.write(codecs.BOM_UTF16_LE)
    f.write(mytext.encode('utf-16-le'))

我被以下线程中选择的‘correct answer’ 严重误导了。

write('\ufeff')

不将所需的 BOM 标记写入文件(至少对于使用 Python 2.7 的我来说没有) 你需要

write('\xff\xfe')

我没有足够的声誉来发布它,所以我发布自己的 Adding BOM (unicode signature) while saving file in python

我认为这与 Java 中的问题完全相同 Write text file in UCS-2 Little Endian, Java

【问题讨论】:

  • @Bakuriu 当我在谷歌上搜索“UCS-2 Little Endian”时,我没有找到那个答案。花了我很多时间才找到它。我在这里发布了这个,希望其他人可以更快地找到解决方案。

标签: python python-2.7 jython


【解决方案1】:
import codecs

mytext = "Help me"

with open("c:\\temp\\myFile.txt", 'w') as f:
    f.write(codecs.BOM_UTF16_LE)
    f.write(mytext.encode('utf-16-le'))

【讨论】:

  • 我无法在 Python 2 上进行测试,对于 Python,我们需要使用 "wb" 打开文件
  • 是的,应该是“wb”。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
相关资源
最近更新 更多