Python3 在解码未映射字符时拉丁语 1 和 cp1252 之间的不同行为



我正在尝试在 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 testx8d filen']

据我所知,字节0x8d在两种编码(拉丁语-1cp1252(上都不匹配。我错过了什么?为什么 Python3 的行为不同?

来自文档:最简单的文本编码(称为"latin-1"或"iso-8859-1"(将代码点 0–255 映射到字节 0x0–0xff

https://docs.python.org/3/library/codecs.html

最新更新