我真的对codecs.open function很困惑。当我这样做的时候:
file = codecs.open("temp","w","utf-8")
file.write(codecs.BOM_UTF8)
file.close()
它给了我错误
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position
0: ordinal not in range(128)
如果我这样做:
file = open("temp","w")
file.write(codecs.BOM_UTF8)
file.close()
它很好用。
问题是为什么第一种方法失败了?如何插入物料清单?
如果第二种方法是正确的方法,那么使用codecs.open(filename,"w","utf-8")有什么意义?
不要使用UTF-8格式的BOM。拜托。
@克里斯蒂安?为什么不呢?
@UTF-8中不需要salmanpk-bom,只会增加复杂性(例如,不能将bom的文件和结果与有效文本连接在一起)。看到这个问题,不要错过问题下面的重要评论。
我认为问题在于codecs.BOM_UTF8是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据"我打算将Unicode作为UTF-8编码文本写入,但您给了我一个字节字符串"来猜测您真正的意思!
尝试直接为字节顺

在尝试使用codecs.open函数以UTF-8格式写入Python文件时,作者遇到了UnicodeDecodeError。问题出在codecs.BOM_UTF8是字节字符串而非Unicode字符串。解决方法是直接写入Unicode字符串的字节顺序标记(u'ufeff')或者使用'utf-8-sig'编码。讨论中还提到了其他编码和写入文件的技巧。
最低0.47元/天 解锁文章
3393

被折叠的 条评论
为什么被折叠?



