UnicodeEncodeError:“ascii”编解码器无法对位置3 2中的字符u“\u2013”进行编码:序号不在范围(128)内

2024-09-29 02:19:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用xlrd解析xsl文件。大部分事情都很顺利。我有一本字典,其中键是字符串,值是字符串列表。所有键和值都是unicode。我可以使用str()方法打印大多数键和值。但是有些值有unicode字符-\u2013,我得到了上面的错误。

我怀疑这是因为unicode中嵌入了unicode,而python解释器无法对其进行解码。那我怎么才能摆脱这个错误呢?

提前谢谢。


Tags: 文件方法字符串列表字典错误unicode解码
3条回答

因为这里str(u'\u2013')会导致错误,所以使用isinstance(foo,basestring)检查unicode/string,如果不是base string类型,则将其转换为unicode,然后应用encode

if isinstance(foo,basestring):
    foo.encode('utf8')
else:
    unicode(foo).encode('utf8')

further read

也可以打印Unicode对象,不需要对其执行str()操作。

假设你真的想要一个str:

在执行str(u'\u2013')时,尝试将Unicode字符串转换为8位字符串。为此,您需要使用编码,即Unicode数据到8位数据之间的映射。str()的作用是使用系统默认编码,在Python 2下是ASCII。ASCII只包含Unicode的127个第一代码点,即\u0000到\u007F1。结果是您得到了上述错误,ASCII编解码器只是不知道什么是u2013(顺便说一句,它是一个长破折号)。

因此,需要指定要使用的编码。常见的有ISO-8859-1,最常见的是拉丁语-1,它包含256个第一代码点;UTF-8,它可以使用可变长度编码对所有代码点进行编码;CP1252,在Windows上是常见的;以及各种中文和日语编码。

你这样使用它们:

u'\u2013'.encode('utf8')

结果是一个包含字节序列的str,该字节序列是所讨论字符的uTF8表示:

'\xe2\x80\x93'

你可以打印出来:

>>> print '\xe2\x80\x93'
–

你也可以试试这个来获取文本。

foo.encode('ascii', 'ignore')

相关问题 更多 >