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

时间:2012-12-08 15:04:41

标签: python unicode

我目前使用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)

3 个答案:

答案 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字符:

  1. 首先转换为unicode

    str_val = unicode(s,'utf-8’)
    str_val = unicode(s,'utf-8’,’replace')
    
  2. 最终编码为字符串

    str_val.encode('utf-8')
    

现在您可以打印:

打印