Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7字符串解码失败。_Python_String_Python 2.7_Unicode_Encoding - Fatal编程技术网

Python 2.7字符串解码失败。

Python 2.7字符串解码失败。,python,string,python-2.7,unicode,encoding,Python,String,Python 2.7,Unicode,Encoding,我希望下面的代码可以正常工作,但它失败了,原因是什么 >>> 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_

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

>>> 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
>s='ö'
>>>s.decode('utf-8')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\encodings\utf_8.py”,第16行,解码
返回编解码器.utf_8_解码(输入,错误,真)
UnicodeDecodeError:“utf8”编解码器无法对位置0中的字节0x94进行解码:起始字节无效

在交互式解释器中,字符串文字的编码完全取决于您的终端或控制台配置。在您的情况下,这不是设置为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'

在交互式解释器中,字符串文字的编码完全取决于终端或控制台配置。在您的情况下,这不是设置为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'

您的字符串没有用utf-8编码。您使用的是什么控制台?您的字符串没有用utf-8编码。您使用的是什么控制台?
locale.getpreferredencoding()
sys.stdin.encoding
不一定返回相同的值。在美国Windows控制台上,前者返回
cp1252
,后者返回
cp437
。在控制台中,后者是正确的。@MarkTolonen:啊,的确如此;win32 API
GetConsoleCP
函数用于确定输入代码页,该代码页未在Python中公开。
locale.getpreferredencoding()
sys.stdin.encoding
不一定返回相同的值。在美国Windows控制台上,前者返回
cp1252
,后者返回
cp437
。在控制台中,后者是正确的。@MarkTolonen:啊,的确如此;win32 API
GetConsoleCP
函数用于确定输入代码页,该代码页未在Python中公开。