读取UTF-8文件会返回意外的字符

时间:2014-03-07 18:26:42

标签: python python-2.7 utf-8

运行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:]但这不是一个干净的解决方案。

文件开头的那些字符是什么?

2 个答案:

答案 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个字节,请忽略它们。