我正在使用 xlrd 解析一个 XSL 文件。大部分东西都运转正常。我有一个字典,其中键是字符串,值是字符串列表。所有的键和值都是 Unicode。我可以使用 str()方法打印大多数键和值。但是有些值的 Unicode字符是 \u2013,我得到了上面的错误。
str()
\u2013
我怀疑之所以会发生这种情况,是因为这是嵌入在 Unicode 中的 Unicode,而 Python 解释器无法对其进行解码。那么我怎样才能消除这个错误呢?
您也可以打印 Unicode 对象,不需要围绕它使用 str ()。
假设你真的想要一个 str:
当执行 str (u’u2013’)时,您将尝试将 Unicode 字符串转换为8位字符串。为此,您需要使用一种编码,即 Unicode 数据到8位数据之间的映射。Str ()所做的是使用系统默认编码,在 Python2下是 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'
And you can print it:
>>> print '\xe2\x80\x93' –
由于这里 str(u'\u2013')导致错误,因此使用 isinstance(foo,basestring)检查 Unicode/string,如果不是基本字符串类型,则将其转换为 Unicode,然后应用编码
str(u'\u2013')
isinstance(foo,basestring)
if isinstance(foo,basestring): foo.encode('utf8') else: unicode(foo).encode('utf8')
进一步阅读
您也可以尝试这样获取文本。
foo.encode('ascii', 'ignore')
我也有同样的问题,这对我来说很好:
str(objdata).encode('utf-8')
对我来说这很有用
Unicode (数据) . encode (‘ utf-8’)
我在最近的一个项目中遇到了这个问题,这真的是一个痛苦的问题。我最终发现,这是因为我们在 Docker 中使用的 Python 编码是“ ansi _ x3.4-1968”,而不是“ utf-8”。因此,如果有人使用 Docker 并得到了这个错误,遵循以下步骤可能会彻底解决您的问题。
在 Dockerfile 的同一目录中创建一个文件并将其命名为 < em > default _ locale ,将这一行放入其中,
Environment = LANG = “ es _ ES. utf8”,LC _ ALL = “ es _ ES. UTF-8”,LC _ LANG = “ es _ ES. UTF-8”
把这些加到你的文件里,
运行 apt-get clean & & apt-get update & & apt-get install-y locale
运行 locale-gen en _ CA. UTF-8
/default _ locale/etc/default/locale
运行 chmod 0755/etc/default/locale
ENV LC _ ALL = en _ CA. UTF-8
ENV LANG = en _ CA. UTF-8
ENV 语言 = en _ CA. UTF-8
当我再次构建并运行 Docker 时,这彻底解决了我的问题,希望这也能解决您的问题。
首先找出这个链接 https://unicode-table.com/en/2013/中的 Unicode 是什么字符
然后在代码中使用以下代码:
{your-string-variable}.replace(u"\u2013", "-")
对于所有有错误的 Unicode 也是如此。