使用' iso-8859-1'解码字节串。永远提出UnicodeDecodeError

时间:2016-04-14 15:42:08

标签: python iso-8859-1

我有一些代码,我处理HTTP标头。 我知道标题值采用ISO-8859-1编码, 虽然我想确保程序在没有的情况下优雅地运行。

最初,我将解码包装在try..catch的{​​{1}}中。

UnicodeDecodeError

然而,当我来测试这种行为时,我无法模拟错误情况。未定义为the iso-8859-1 codepage的字节似乎仍然可以成功解码。

try:
    value = header.decode('iso-8859-1')
except UnicodeDecodeError:
    ...

所以:

  • 我可以避免使用>>> b'\x80'.decode('iso-8859-1') u'\x80' 并假设它总是成功返回一个unicode字符串吗?
  • try..catch wrt超出代码页字节的预期行为是否可能是特定于平台的?
  • 是否有可重现的案例,此代码引发.decode('iso-8859-1')

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

1 个答案:

答案 0 :(得分:1)

似乎它不会给你带来麻烦:

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)