找出unicode:'ascii'编解码器无法解码

Jon*_*han 0 python unicode

我目前使用Sublime 2并在那里运行我的python代码.当我尝试运行此代码时.我收到此错误:

UnicodeDecodeError:'ascii'编解码器无法解码位置6中的字节0xc3:序数不在范围内(128)

# -*- coding: utf-8 -*-  
s = unicode('abcdefö') 
print s
Run Code Online (Sandbox Code Playgroud)

我一直在阅读关于unicode的python文档,据我所知,这应该可行,或者它是不起作用的控制台

编辑:使用s =u'abcdefö'作为字符串产生几乎相同的结果.我得到的结果是

UnicodeEncodeError:'ascii'编解码器无法对位置6中的字符u'\ xf6'进行编码:序数不在范围内(128)

Joc*_*zel 6

会发生什么是unicode('abcdefö')尝试在运行时将编码的字符串解码为unicode .该coding: utf-8行只告诉Python 源文件是用utf8编码的.当脚本运行时,它已被编译并且字符串已存储为编码字符串.因此,当Python尝试解码它默认使用ascii的字符串时.由于字符串实际上是utf8编码,因此失败.

您可以这样做s = u'abcdefö',告诉编译器使用为文件声明的编码对字符串进行解码,并将其存储为unicode.s = unicode('abcdefö', 'utf8')或者s = 'abcdefö'.decode('utf8')在运行时会做同样的事情.

但是,并不一定意味着你print s现在可以.首先,内部unicode字符串必须以stdout(控制台/编辑器/ IDE)实际显示的字符集进行编码.遗憾的是,Python通常无法确定正确的字符集并再次默认为ascii,并且当字符串包含非ascii字符时会出错.Python Wiki知道一些正确设置stdout的方法.