我正在尝试在 Python3 中读取指定编码 cp1252 的文本文件,该编码具有未映射的字符(例如字节0x8d)。
with open(inputfilename, mode='r', encoding='cp1252') as inputfile:
print(inputfile.readlines())
我显然得到以下异常:
Traceback (most recent call last):
File "test.py", line 9, in <module>
print(inputfile.readlines())
File "/usr/lib/python3.6/encodings/cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 14: character maps to <undefined>
我想了解为什么在使用编码latin-1读取同一文件时,我没有得到相同的异常,并且字节0x8d表示为十六进制字符串:
$ python3 test.py
['This is a test\x8d file\n']
据我所知,字节0x8d在两种编码( latin-1和cp1252)上都不匹配。我错过了什么?为什么 Python3 的行为不同?