运行Windows 8 64位。我有一个文件存储一些数据,使用Windows记事本以UTF-8编码保存。假设这是文件的内容:
1,一些数据,这里,0,-1
我正在读这样的话:
f = open("file.txt", "rb")
f.read()
f.close()
而f.read()
会返回此信息:
U “\ XEF \ XBB \ xbf1,一些数据,这里,0,-1”
我可以使用f.read()[3:]
但这不是一个干净的解决方案。
文件开头的那些字符是什么?
答案 0 :(得分:2)
前3个字节是UTF-8 BOM或字节顺序标记。 UTF-8不需要需要 BOM(它具有与UTF-16和UTF-32不同的固定字节顺序),但是许多工具(主要是Microsoft的)无论如何都要添加它以帮助进行文件编码检测
您可以对其进行测试并安全地跳过它,使用codecs.BOM_UTF8
来处理它:
import codecs
data = f.read()
if data.startswith(codecs.BOM_UTF8):
data = data[3:]
您还可以使用io.open()
函数打开文件,让Python将文件解码为Unicode,并告诉它使用utf_8_sig
编解码器:
import io
with io.open('file.txt', encoding='utf_8_sig'):
data = f.read()
答案 1 :(得分:1)
这是BOM(字节顺序标记)
实际上,UTF-8只有一个有效的字节顺序,
但尽管如此,可能有这个3字节序列
在文件的开头(一般数据)。
- >如果这些值恰好是前3个字节,请忽略它们。