即使我试图在python的gzip.open()中指定编码,它似乎总是使用cp1252.py来编码文件的内容。 我的代码:
with gzip.open('file.gz', 'rt', 'cp1250') as f:
content = f.read()
响应:
文件“C:\ Python34 \ lib \ encodings \ cp1252.py”,第23行,解码 return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError:'charmap'编解码器无法解码位置52893中的字节0x8f:字符映射到未定义
答案 0 :(得分:0)
gzip.open
defined为:
gzip.open(filename,mode =' rb',compresslevel = 9,encoding = None,errors = None,newline = None)
因此,gzip.open('file.gz', 'rt', 'cp1250')
将这些参数发送给它:
- filename =' file.gz'
- mode =' rt'
- compresslevel =' cp1250'
这显然是错误的,因为意图是使用' cp1250'编码。
encoding
参数可以作为第四个位置参数发送,也可以作为关键字参数发送:
gzip.open('file.gz', 'rt', 5, 'cp1250') # 4th positional argument
gzip.open('file.gz', 'rt', encoding='cp1250') # keyword argument
Python 2 version of gzip.open
不接受encoding
参数且不接受文本模式,因此解码必须在读取数据后明确完成:
with gzip.open('file.gz', 'rb') as f:
data = f.read()
decoded_data = data.decode('cp1250')