ibeautiful
2019-10-18 14:38:46
我正在使用Python閱讀一系列源代碼文件,并遇到Unicode BOM錯(cuò)誤。這是我的代碼: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)如您所見,我正在使用檢測(cè)代碼chardet,然后讀取內(nèi)存中的文件并嘗試打印。對(duì)于包含BOM表的Unicode文件,print語句失敗,并顯示以下錯(cuò)誤:UnicodeEncodeError:'charmap'編解碼器無法對(duì)位置0-2中的字符進(jìn)行編碼:字符映射為<undefined>我猜想它正在嘗試使用默認(rèn)字符集對(duì)BOM進(jìn)行解碼,但是失敗了。如何從字符串中刪除BOM表以防止這種情況?
3 回答

慕村9548890
TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒有理由檢查BOM是否存在utf-8-sig,為您管理utf-8該BOM 并表現(xiàn)出與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是否存在,您都可以正確解碼給定的字符串。如果您認(rèn)為正在讀取的文件中極有可能存在BOM字符,則只需使用utf-8-sig而不必?fù)?dān)心
添加回答
舉報(bào)
0/150
提交
取消