使用带encoding参数的file.read()时遇UnicodeDecodeError错误求助
解决UnicodeDecodeError:UTF-8解码失败问题
问题本质
你指定了encoding="utf-8"读取文件,但文件实际编码并非UTF-8,或是存在损坏的UTF-8字节(比如错误信息里的0xdd,单独出现不属于有效的UTF-8续字节)。另外注意:你代码最后print(file)打印的是文件对象,而非文件内容,要查看内容需改成print(text)。
可行解决方案
1. 尝试常见替代编码
Windows环境下非UTF-8文件常用gbk、cp1252编码,替换编码参数尝试:
# 用gbk编码读取 with open("test.txt", "r", encoding="gbk") as file: text = file.read() print(text)
或者尝试cp1252:
with open("test.txt", "r", encoding="cp1252") as file: text = file.read() print(text)
2. 跳过/替换损坏字节(应急方案)
如果允许丢失少量数据,可添加errors参数跳过损坏字节:
# 忽略错误字节 with open("test.txt", "r", encoding="utf-8", errors="ignore") as file: text = file.read() print(text)
或用�替换损坏字节:
with open("test.txt", "r", encoding="utf-8", errors="replace") as file: text = file.read() print(text)
3. 检测文件真实编码
用第三方库chardet自动检测编码:
先安装库:
pip install chardet
再执行检测代码:
import chardet with open("test.txt", "rb") as f: detect_result = chardet.detect(f.read()) print(f"检测到的编码:{detect_result['encoding']}") # 用检测出的编码读取文件 with open("test.txt", "r", encoding=detect_result['encoding']) as file: text = file.read() print(text)
4. 推荐的文件操作方式
始终使用with语句,它会自动关闭文件,避免资源泄漏,这是Python官方推荐的文件操作规范。
内容的提问来源于stack exchange,提问作者kalizan
相关产品推荐
相关产品推荐

