我遇到了这个问题,当我尝试解码字符串时遇到一个错误,当我尝试编码时遇到另一个错误,下面的错误,是否有永久解决方案?
请注意,由于我无法复制/粘贴某些错误,您可能无法使用我提供的字符串重现编码错误
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
答案 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')
这将只是删除令人讨厌的字符,或者您可以查看导致问题的特定文本输入中的字符。