Python 使用'解码bytestring;iso-8859-1';有没有养过独角兽

Python 使用'解码bytestring;iso-8859-1';有没有养过独角兽,python,iso-8859-1,Python,Iso 8859 1,我有一些处理HTTP头的代码。 我知道报头值应该采用ISO-8859-1编码, 尽管我想确保程序在不正常的情况下能够正常运行 最初,我将解码包装在一个try..catch中,用于UnicodeDecodeError try: value = header.decode('iso-8859-1') except UnicodeDecodeError: ... 然而,当我开始测试这种行为时,我无法模拟错误条件。未定义为处于中的字节似乎仍能成功解码 >>> b'\x

我有一些处理HTTP头的代码。 我知道报头值应该采用ISO-8859-1编码, 尽管我想确保程序在不正常的情况下能够正常运行

最初,我将解码包装在一个
try..catch
中,用于
UnicodeDecodeError

try:
    value = header.decode('iso-8859-1')
except UnicodeDecodeError:
    ...
然而,当我开始测试这种行为时,我无法模拟错误条件。未定义为处于中的字节似乎仍能成功解码

>>> b'\x80'.decode('iso-8859-1')
u'\x80'
因此:

  • 我是否可以避免使用
    try..catch
    并假设它总是成功返回unicode字符串
  • .decode('iso-8859-1')
    wrt out of codepage bytes的预期行为是否可能是特定于平台的
  • 是否存在由该代码引发的
    UnicodeDecodeError
    可再现的情况

注意:针对Python 2.7和3.4进行测试。

似乎不会给您带来问题:

In [1]: for i in xrange(9999):
   ...:     chr(i).decode('iso-8859-1')
   ...:     
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-c3c072235f24> in <module>()
      1 for i in xrange(9999):
----> 2     chr(i).decode('iso-8859-1')
      3 

ValueError: chr() arg not in range(256)
[1]中的
:对于xrange(9999)中的i:
…:chr(i).解码('iso-8859-1')
...:     
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
X范围(9999)中的i为1:
---->2 chr(i).解码('iso-8859-1')
3.
ValueError:chr()参数不在范围内(256)

在ISO-8859-1编码中,所有字节值都是合法的,所以不会。太好了,谢谢。在您引用的关于ISO/IEC 8859-1的维基百科文章的第页中找到,其中部分写道:“……此映射将C0和C1控制字符分配给未分配的代码值,因此通过每个可能的8位值提供256个字符[斜体添加]。“还要注意,C0控制集定义0x00–0x1F范围内的代码,C1控制集定义0x80–0x9F范围内的代码。”因此,通过每个可能的8位值提供256个字符”