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

2024-02-13

我正在使用 xlrd 解析 XSL 文件。大多数事情都运行良好。我有一本字典,其中键是字符串,值是字符串列表。所有键和值都是 Unicode。我可以使用打印大部分键和值str()方法。但有些值具有 Unicode 字符\u2013为此我收到上述错误。

我怀疑发生这种情况是因为这是嵌入在 Unicode 中的 Unicode,而 Python 解释器无法对其进行解码。那么我怎样才能摆脱这个错误呢?


您也可以打印 Unicode 对象,无需对其进行 str() 操作。

假设你真的想要一个 str:

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

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

你像这样使用它们:

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

结果是一个包含字节序列的 str,该字节序列是相关字符的 utF8 表示形式:

'\xe2\x80\x93'

你可以打印它:

>>> print '\xe2\x80\x93'
–
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐