我目前使用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)
会发生什么是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的方法.