Python:如何处理UnicodeEncodeError?

时间:2015-01-30 00:02:48

标签: python unicode

这就是我所看到的:

Traceback (most recent call last):
  File "/home/user/tools/executeJobs.py", line 86, in <module>
    owner = re.sub('^(AS[0-9]+ )', '', str(element[2]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 13: ordinal not in range(128)

在错误行中,您已经看到了有问题的行。 str(array[0])从未让我失望过。如何解决这个问题?快速而肮脏的解决方案很好。

更新

元素[2]来自这个二进制.dat列表:http://github.com/maxmind/geoip-api-php/blob/master/tests/data/ ...也可以在这里使用:http://dev.maxmind.com/geoip/legacy/geolite(表格底部的IP / ASN)

2 个答案:

答案 0 :(得分:1)

\ xe7似乎是latin1编码中的抑扬符c ç

所以假设你有一个unicode字符串u"\xe7".encode("latin1")应该给你bytestring "\xe7",你也可以选择将它编码为&#34; utf8&#34; u"\xe7".encode("utf8")会为您提供字节字符串"\xc3\xa7" ...但是可能会或可能不会解决您的问题。但它肯定会给你一个不同的错误

快速而肮脏的解决方案

try:
    owner = re.sub('^(AS[0-9]+ )', '', element[2])
except TypeError as e:
    print "Weird:",element

答案 1 :(得分:-2)

我一直使用

s.replace(u'\xa0',' ')

在您的情况下,它应该看起来像

s.replace(u'\xe7','whatever')