用Python写入UTF-8文件

发布于 2021-01-29 15:01:57

我真的很困惑codecs.open function。当我做:

file = codecs.open("temp", "w", "utf-8")
file.write(codecs.BOM_UTF8)
file.close()

它给我错误

UnicodeDecodeError:’ascii’编解码器无法解码位置0的字节0xef:序数不在范围内(128)

如果我做:

file = open("temp", "w")
file.write(codecs.BOM_UTF8)
file.close()

它工作正常。

问题 是为什么第一种方法会失败?以及如何插入宝?

如果第二种方法是正确的方法,那么使用的重点是codecs.open(filename, "w", "utf-8")什么?

关注者
0
被浏览
102
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我相信问题在于这codecs.BOM_UTF8是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据“我是将Unicode编写为UTF-8编码的文本,但是您给了我一个字节字符串!”来猜测您的意思是什么!

    尝试直接为字节顺序标记(即Unicode U + FEFF)编写Unicode字符串,以便该文件将其编码为UTF-8:

    import codecs
    
    file = codecs.open("lol", "w", "utf-8")
    file.write(u'\ufeff')
    file.close()
    

    (这似乎给出了正确的答案-带有EF BB BF字节的文件。)

    编辑:S. Lott建议使用“
    utf-8-sig”作为编码要比直接自己编写BOM更好,但是在此我将保留此答案,因为它可以解释以前的问题。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看