【问题标题】:Python 2.7 String decode failed.Python 2.7 字符串解码失败。
【发布时间】:2017-07-12 07:56:52
【问题描述】:

我希望下面的代码可以正常工作,但它失败了,是什么原因?

>>> s = 'ö'
>>> s.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x94 in position 0: invalid start byte

【问题讨论】:

  • 您的字符串未以 utf-8 编码。你用的是什么控制台?

标签: python string python-2.7 unicode encoding


【解决方案1】:

在交互式解释器中,字符串文字的编码完全取决于您的终端或控制台配置。在您的情况下,没有设置为 UTF-8。

您可以使用sys.stdin.encoding 属性来确定要使用的编解码器:

>>> s = 'ö'
>>> import sys
>>> s.decode(sys.stdin.encoding)
u'\xf6'

或者,直接创建一个unicode 字符串文字(使用u 前缀); Python 交互式解释器知道在这种情况下使用 sys.stdin.encoding 编解码器:

>>> s = u'ö'
>>> s
u'\xf6'

【讨论】:

  • locale.getpreferredencoding() 和 sys.stdin.encoding 不一定返回相同的值。在美国 Windows 控制台上,前者返回cp1252,后者返回cp437。在控制台中后者是正确的。
  • @MarkTolonen:啊,确实; win32 APIGetConsoleCP函数用于判断输入代码页,在Python中不暴露。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2018-02-15
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多