UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte解决方法
近期在使用python写一个脚本,在读取某文件时发生了UnicodeDecodeError,报错内容为UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
,经过不断的查阅资料以及测试,最终解决了这个报错。
解决方法:
f = open('xxx.txt', 'r', encoding='utf-16').read()
使用utf-16
编码即可正常读取文件。
当读取文件出现UnicodeDecodeError基本上是文件内容的编码方式,如果不确定使用什么编码读取文件,可以使用notepad查看文件的编码格式,然后在encoding处选择文件的编码格式即可正常读取文件内容。
也可以使用python的一个第三方库(chardet
)
import chardet
# 测试的时候尽量多点字符,不然chardet识别不了
s = "你好世界,这是一个测试".encode("gb2312")
chardet.detect(s)
# 返回结果
# >> {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
# 那么解码的时候只需要decode("gb2312")即可
d = s.decode("gb2312")
# 如果要知道文件采用的编码,可以先使用如下方式
with open("./code_test.txt", "rb") as f:
s = f.read()
print(chardet.detect(s))
# 采用二进制读取文件,在用chardet识别编码,在打开文件时即可
# f = open('xxx.txt', 'r', encoding='chardet返回的encoding部分').read()
# 如chardet的encoding识别时GB2312
f = open("xxx.txt", "r", encoding="gb2312").read()