Python处理特殊字符问题:读取.gz文件时Unicode解码错误
解决读取.gz文件时的UnicodeDecodeError问题
问题原因
出现UnicodeDecodeError是因为文件中包含的§字符(对应字节0xa7)不属于UTF-8编码范围,该字节在Latin-1(ISO-8859-1)或Windows-1252编码中对应§符号,而你之前的代码默认用UTF-8解码,导致解码失败。
解决方案
修改读取.gz文件的代码,明确指定正确的编码格式,即可正常读取包含§的行:
示例修改代码
假设你原来的读取代码类似:
import gzip import os for filename in os.listdir("./gz_files"): if filename.endswith(".gz"): with gzip.open(os.path.join("./gz_files", filename), 'rt') as f: for line in f: # 处理行逻辑 print(line)
将其修改为指定encoding='latin-1'(或'cp1252',两者对0xa7的解析一致):
import gzip import os for filename in os.listdir("./gz_files"): if filename.endswith(".gz"): with gzip.open(os.path.join("./gz_files", filename), 'rt', encoding='latin-1') as f: for line in f: # 处理行逻辑,比如提取目标行写入报告 if ':§f Press' in line: with open("report.txt", 'a', encoding='utf-8') as report_f: report_f.write(line)
说明
latin-1是单字节编码,能覆盖所有0-255的字节值,不会出现解码失败的情况,同时能正确解析§符号。- 写入报告时用
utf-8编码,确保报告文件的通用性。
内容的提问来源于stack exchange,提问作者Prison Feed
相关产品推荐
相关产品推荐

