在Python中将没有BOM的UTF-8转换为带有BOM的UTF-8

这里有两个问题。我有一组通常是带有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?


从下面编辑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

新闻快讯

有人在评论中告诉我,错误是我以'rw'模式而不是'r +'/'r + b'模式打开文件,因此我最终应重新编辑问题并删除已解决的部分。


慕工程0101907
浏览 2638回答 3
3回答

偶然的你

在Python 3中,这非常简单:读取文件并使用utf-8编码重写:s = open(bom_file, mode='r', encoding='utf-8-sig').read()open(bom_file, mode='w', encoding='utf-8').write(s)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python