相关疑难解决方法(0)

用Python写入UTF-8文件

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

file = codecs.open("temp", "w", "utf-8")
file.write(codecs.BOM_UTF8)
file.close()
Run Code Online (Sandbox Code Playgroud)

它给了我错误

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

如果我做:

file = open("temp", "w")
file.write(codecs.BOM_UTF8)
file.close()
Run Code Online (Sandbox Code Playgroud)

它工作正常.

问题是为什么第一种方法失败了?我该如何插入bom?

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

python byte-order-mark utf-8

184
推荐指数
5
解决办法
29万
查看次数

附加到结尾时文件中间的python utf-8-sig BOM

我最近注意到Python在使用utf-8-sig编码附加到文件时表现得非常明显.见下文:

>>> import codecs, os
>>> os.path.isfile('123')
False
>>> codecs.open('123', 'a', encoding='utf-8-sig').write('123\n')
>>> codecs.open('123', 'a', encoding='utf-8-sig').write('123\n')
Run Code Online (Sandbox Code Playgroud)

以下文本以文件结尾:

<BOM>123
<BOM>123
Run Code Online (Sandbox Code Playgroud)

这不是一个bug吗?这是不合逻辑的.任何人都可以向我解释为什么会这样做?为什么不在文件不存在且需要创建时才设置BOM?

python byte-order-mark utf-8

7
推荐指数
1
解决办法
8512
查看次数

标签 统计

byte-order-mark ×2

python ×2

utf-8 ×2