2014-10-27 100 views
13

我永久得到以下错误:UnicodeEncodeError: 'ASCII' 编解码器不能编码字符U ' XE4'

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 27: ordinal not in range(128) 

我已经尝试过

  1. x.encode("ascii", "ignore")
  2. x.encode("utf-8")
  3. x.decode("utf-8")

然而,没有任何工作。

+2

u'\ xe4'.encode('ascii','ignore')'对我来说工作正常。我们需要更多的背景来看看真正的问题是什么。 – 2014-10-27 17:14:27

+2

#2也“有效”,因为它会产生无误差的结果;不能说它是否是理想的结果。 – 2014-10-27 17:16:33

回答

9

你必须发现在源码中哪个编码是这个字符。

我想这是ISO-8859-1(欧洲语言),在这种情况下,它是“ä”,但你应该检查。它也可以是西里尔文或希腊文。

有关此编码中字符的完整列表,请参阅http://en.wikipedia.org/wiki/ISO/IEC_8859-1

利用这些信息,你可以问Python来转换:

在Python 2.7

>>> s = '\xe4' 
>>> t = s.decode('iso-8859-1') 
>>> print t 
ä 
>>> for c in t: 
... print ord(c) 
... 
228 
>>> u = t.encode('utf-8') 
>>> print u 
ä 
>>> for c in bytes(u): 
... print ord(c) 
... 
195 
164 

字符串t是在Python ISO-8859-1内部编码。字符串u以UTF-8内部编码,并且该字符在UTF-8中占用2个字节。还要注意,print指令“知道”如何显示这些不同的编码。

相关问题