0

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

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

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

我一直在阅读有关 unicode 的 python 文档,据我了解这应该可以工作,或者是控制台不工作

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

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

4

3 回答 3

6

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

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

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

于 2012-12-08T15:34:41.987 回答
1

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

s = u'abcdefö'
于 2012-12-08T15:05:57.410 回答
0

s = 'abcdefö'

如果字符串已经是 unicode,请不要尝试 unicode()。即unicode(s) 是错误的

IF type(s) == str但包含 unicode 字符:

  1. 首先转换为unicode

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

    str_val.encode('utf-8')
    

现在您可以打印:

印刷

于 2019-03-07T16:36:47.727 回答