1

我正在尝试在 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-1cp1252)上都不匹配。我错过了什么?为什么 Python3 的行为不同?

4

0 回答 0