首页 文章

搞清楚unicode:'ascii'编解码器无法解码

提问于
浏览
0

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

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

# -*- coding: utf-8 -*-  
s = unicode('abcdefö') 
print s

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

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

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

2 回答

  • 1

    会发生什么是 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 .

  • 5

    您需要将字符串标记为unicode字符串:

    s = u'abcdefö'
    

相关问题