在Python中处理UTF-8数字

Ηλί*_*ίας 11 python byte-order-mark utf-8 character-encoding

假设我正在读取包含3个逗号分隔数字的文件.该文件使用未知编码保存,到目前为止我正在处理ANSI和UTF-8.如果文件是UTF-8并且它有1行,值为115,113,12,那么:

with open(file) as f:
    a,b,c=map(int,f.readline().split(','))
Run Code Online (Sandbox Code Playgroud)

会抛出这个:

invalid literal for int() with base 10: '\xef\xbb\xbf115'
Run Code Online (Sandbox Code Playgroud)

第一个数字总是被这些'\ xef\xbb\xbf'字符破坏.对于其余2个数字,转换工作正常.如果我用''手动替换'\ xef\xbb\xbf'然后进行int转换它将起作用.

对于任何类型的编码文件,有更好的方法吗?

tzo*_*zot 17

import codecs

with codecs.open(file, "r", "utf-8-sig") as f:
    a, b, c= map(int, f.readline().split(","))
Run Code Online (Sandbox Code Playgroud)

这适用于Python 2.6.4.该codecs.open调用打开文件并以unicode形式返回数据,从UTF-8解码并忽略初始BOM.


Gre*_*ill 13

您所看到的是UTF-8编码的BOM,或"字节顺序标记".BOM通常不用于UTF-8文件,因此处理它的最佳方法可能是使用UTF-8编解码器打开文件,并跳过该U+FEFF字符(如果存在).