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

时间:2018-11-15 06:41:18

标签: python utf-8

我遇到了这个问题,当我尝试解码字符串时遇到一个错误,当我尝试编码时遇到另一个错误,下面的错误,是否有永久解决方案?

请注意,由于我无法复制/粘贴某些错误,您可能无法使用我提供的字符串重现编码错误

text =  "sometext"

string = '\n'.join(list(set(text)))
try:
    print "decode"
    text = string.decode('UTF-8')
except Exception as e:
    print e
    text = string.encode('UTF-8')   

错误:-

使用string.decode('UTF-8')时出错

'ascii' codec can't encode character u'\u2602' in position 438: ordinal not in range(128)

使用string.encode('UTF-8')时出错

Exception All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

1 个答案:

答案 0 :(得分:0)

第一个错误

您提供的代码将可以工作,因为文本是一个字节字符串(就像您使用Python 2一样)。但是,您尝试做的是将UTF-8字符串解码为 ASCII码是可能的,但前提是该Unicode字符串仅包含具有与ASCII等价的字符(您可以看到ASCII字符列表here)。在您的情况下,它遇到的是Unicode字符(特别是☂),没有ASCII等价字符。您可以使用以下方法来解决此问题:

string.decode('UTF-8', 'ignore')

只会忽略(即不替换任何内容)无法编码为ASCII的字符。

第二个错误

此错误更有趣。似乎您要尝试编码为UTF-8的文本包含NULL字节或特定的control characters,这是您尝试使用的Unicode(UTF-8)版本不允许的编码成。同样,您实际提供的代码可以工作,但是您尝试编码的文本中的某些内容违反了编码。您可以尝试上述相同的技巧:

string.encode('UTF-8', 'ignore')

这将只是删除令人讨厌的字符,或者您可以查看导致问题的特定文本输入中的字符。