我目前使用Sublime 2并在那里运行我的python代码。 当我尝试运行此代码时。我收到这个错误:
UnicodeDecodeError:'ascii'编解码器无法将字节0xc3解码到位 6:序数不在范围内(128)
# -*- coding: utf-8 -*-
s = unicode('abcdefö')
print s
我一直在阅读关于unicode的python文档,据我所知,这应该可行,或者它是不起作用的控制台
编辑:使用s =u'abcdefö'作为字符串会产生几乎相同的结果。我得到的结果是
UnicodeEncodeError:'ascii'编解码器无法对字符u'\ xf6'进行编码 位置6:序数不在范围内(128)
答案 0 :(得分:5)
在{em>运行时期间,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知道a few ways正确设置stdout。
答案 1 :(得分:1)
您需要将字符串标记为unicode字符串:
s = u'abcdefö'
答案 2 :(得分:0)
s ='abcdefö'
如果字符串已经在unicode中,请不要尝试unicode()。即 unicode(s)错误。
如果类型== str ,但包含Unicode字符:
首先转换为unicode
str_val = unicode(s,'utf-8’)
str_val = unicode(s,'utf-8’,’replace')
最终编码为字符串
str_val.encode('utf-8')
现在您可以打印:
打印