问题描述:
lines=fi.readlines() UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence 出现了这个错误是什么意思呢?
问题解答:
这个错误 UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
通常表示你尝试使用 gbk
编码读取一个文件,但文件的实际编码与 gbk
不匹配,导致无法正确解码。
在你的示例中,可能文件包含的内容是用 UTF-8 编码保存的,但在读取文件时,默认使用了 gbk
编码。解决这个问题的方法是显式指定正确的文件编码。
修正代码
你可以显式指定文件编码为 utf-8
,这样可以避免编码不匹配的问题:
ls = [["张三", 12, 12, 12], ["李四", 13, 13, 13]]
# 创建并打开一个txt文件,用于写入
with open("output.txt", "w", encoding="utf-8") as f:
for sublist in ls:
# 将子列表转换为字符串,每个元素用逗号隔开,然后写入文件
line = ','.join(map(str, sublist))
f.write(line + '\n')
# 读取文件并打印内容
with open("output.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines:
print(line.strip())
解释
-
写入文件:
- 使用
with open("output.txt", "w", encoding="utf-8") as f:
打开文件,并显式指定编码为utf-8
进行写入。 - 将列表内容写入文件,每个子列表占一行。
- 使用
-
读取文件:
- 使用
with open("output.txt", "r", encoding="utf-8") as f:
打开文件,并显式指定编码为utf-8
进行读取。 - 使用
readlines()
方法读取文件的所有行,并打印每行内容。
- 使用
避免 UnicodeDecodeError
通过显式指定编码为 utf-8
,可以避免因为编码不匹配而导致的 UnicodeDecodeError
。确保文件的实际编码与指定的编码一致,是处理文本文件时非常重要的一步。