在Python的gzip.open()中设置'encoding'似乎不起作用

时间:2016-10-06 19:54:03

标签: python python-3.x character-encoding gzip

即使我试图在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:字符映射到未定义

1 个答案:

答案 0 :(得分:0)

Python 3.x

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.x

Python 2 version of gzip.open不接受encoding参数且不接受文本模式,因此解码必须在读取数据后明确完成:

with gzip.open('file.gz', 'rb') as f:
    data = f.read()

decoded_data = data.decode('cp1250')