UnicodeEncodeError:'ascii'编解码器不能在位置3编码字符u'\ u2013'2:序号不在范围内(128)
我正在使用xlrdparsing一个xsl文件。 大部分的事情工作正常。 我有一个字典,其中键是string,值是string列表。 所有的键和值都是unicode。 我可以使用str()
方法打印大部分的键和值。 但有些值具有unicode字符 – 我得到上述错误。
我怀疑这是因为这是unicodeembedded在unicode和python解释器无法解码它。 那么我怎样才能摆脱这个错误呢?
提前致谢。
你也可以打印Unicode对象,你不需要在它周围执行str()。
假设你真的想要一个str:
当您执行str(u'\ u2013')时,您正试图将Unicodestring转换为8位string。 要做到这一点,你需要使用编码,Unicode数据到8位数据之间的映射。 str()所做的是使用系统默认编码,在Python 2下是ASCII。 ASCII只包含127个Unicode的第一个代码点,即\ u0000到\ u007F1。 结果是你得到上面的错误,ASCII编解码器只是不知道是什么(这是一个很长的短跑,顺便说一句)。
因此您需要指定要使用的编码。 常见的是ISO-8859-1,通常被称为Latin-1,其中包含256个第一代码点; UTF-8可以通过使用可变长度编码,Windows上常见的CP1252以及各种中文和日文编码来编码所有的编码点。
你使用它们是这样的:
u'\u2013'.encode('utf8')
结果是一个包含一系列字节的str,它是所讨论字符的uTF8表示forms:
'\xe2\x80\x93'
你可以打印它:
>>> print '\xe2\x80\x93' –
你也可以尝试这个来获取文本。
foo.encode('ascii', 'ignore')
因为这里str(u'\u2013')
导致错误,所以使用isinstance(foo,basestring)
来检查unicode / string,如果不是type base base转换成unicode然后apply encode
if isinstance(foo,basestring): foo.encode('utf8') else: unicode(foo).encode('utf8')
进一步阅读
我有同样的问题。 这工作对我来说很好:
str(objdata).encode('utf-8')