【发布时间】:2012-02-12 11:21:47
【问题描述】:
这里有两个问题。我有一组通常是带有 BOM 的 UTF-8 文件。我想将它们(理想情况下)转换为没有 BOM 的 UTF-8。似乎codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors) 会处理这个问题。但我真的没有看到任何关于使用的好例子。这是处理这个问题的最好方法吗?
source files:
Tue Jan 17$ file brh-m-157.json
brh-m-157.json: UTF-8 Unicode (with BOM) text
此外,如果我们可以在不明确知道的情况下处理不同的输入编码(见 ASCII 和 UTF-16),那将是理想的。看来这一切都应该是可行的。有没有一种解决方案可以将任何已知的 Python 编码和输出为 UTF-8 而无需 BOM?
edit 1 从下方提出 sol'n(谢谢!)
fp = open('brh-m-157.json','rw')
s = fp.read()
u = s.decode('utf-8-sig')
s = u.encode('utf-8')
print fp.encoding
fp.write(s)
这给了我以下错误:
IOError: [Errno 9] Bad file descriptor
新闻快讯
我在 cmets 中被告知错误是我使用模式 'rw' 而不是 'r+'/'r+b' 打开文件,所以我最终应该重新编辑我的问题并删除已解决的部分。
【问题讨论】:
-
您需要打开文件进行阅读和更新,即使用
r+模式。也添加b,这样它也可以在 Windows 上运行,而无需任何有趣的行尾业务。最后,您需要回到文件的开头并在末尾截断它 - 请参阅我的更新答案。
标签: python utf-8 utf-16 byte-order-mark