为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中使用BOM字符读取Unicode文件数据

在Python中使用BOM字符读取Unicode文件数据

ibeautiful 2019-10-18 14:38:46
我正在使用Python阅读一系列源代码文件,并遇到Unicode BOM错误。这是我的代码:bytes = min(32, os.path.getsize(filename))raw = open(filename, 'rb').read(bytes)result = chardet.detect(raw)encoding = result['encoding']infile = open(filename, mode, encoding=encoding)data = infile.read()infile.close()print(data)如您所见,我正在使用检测代码chardet,然后读取内存中的文件并尝试打印。对于包含BOM表的Unicode文件,print语句失败,并显示以下错误:UnicodeEncodeError:'charmap'编解码器无法对位置0-2中的字符进行编码:字符映射为<undefined>我猜想它正在尝试使用默认字符集对BOM进行解码,但是失败了。如何从字符串中删除BOM表以防止这种情况?
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

没有理由检查BOM是否存在utf-8-sig,为您管理utf-8该BOM 并表现出与BOM不存在完全相同的行为:


# Standard UTF-8 without BOM

>>> b'hello'.decode('utf-8')

'hello'

>>> b'hello'.decode('utf-8-sig')

'hello'


# BOM encoded UTF-8

>>> b'\xef\xbb\xbfhello'.decode('utf-8')

'\ufeffhello'

>>> b'\xef\xbb\xbfhello'.decode('utf-8-sig')

'hello'

在上面的示例中,utf-8-sig无论BOM是否存在,您都可以正确解码给定的字符串。如果您认为正在读取的文件中极有可能存在BOM字符,则只需使用utf-8-sig而不必担心


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 544 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信