在Python中处理UTF-8数字

11 投票
2 回答
10000 浏览
提问于 2025-04-15 19:53

假设我在读取一个文件,这个文件里有3个用逗号分隔的数字。这个文件的编码方式我不太清楚,目前我尝试过ANSI和UTF-8。如果这个文件是UTF-8格式的,里面有一行数据是115,113,12,那么:

with open(file) as f:
    a,b,c=map(int,f.readline().split(','))

会出现这样的错误:

invalid literal for int() with base 10: '\xef\xbb\xbf115'

第一个数字总是会被一些奇怪的字符'\xef\xbb\xbf'搞得乱七八糟。后面两个数字的转换倒是没问题。如果我手动把'\xef\xbb\xbf'替换成空字符串,然后再进行整数转换,就能正常工作。

有没有更好的方法来处理任何编码类型的文件呢?

2 个回答

13

你看到的这个是一个UTF-8编码的字节顺序标记,简称BOM。通常情况下,UTF-8文件里不太会用到这个标记。所以处理这个问题的最好方法是用UTF-8的编码方式打开文件,如果里面有这个U+FEFF字符,就跳过它。

17
import codecs

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

这个在 Python 2.6.4 里是可以用的。codecs.open 这个调用会打开一个文件,并把里面的数据以 Unicode 格式返回,它会从 UTF-8 编码中解码,并且忽略开头的 BOM(字节顺序标记)。

撰写回答