UnicodeEncodeError: 'ascii' codec can't encode character u'u2013' in position 3 2: ordinal not in range(128)
我正在使用xlrd解析xsl文件。 大多数事情都很好。 我有一个字典,其中键是字符串,值是字符串列表。 所有键和值都是unicode。 我可以使用
我怀疑这种情况正在发生,因为这是嵌入在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,以及各种中文和日文编码。
你像这样使用它们:
1 | u'\u2013'.encode('utf8') |
结果是一个str包含一个字节序列,它是所讨论字符的uTF8表示:
1 | '\xe2\x80\x93' |
你可以打印出来:
1 2 | >>> print '\xe2\x80\x93' – |
您也可以尝试这个来获取文本。
1 | foo.encode('ascii', 'ignore') |
因为这里
1 2 3 4 | if isinstance(foo,basestring): foo.encode('utf8') else: unicode(foo).encode('utf8') |
进一步阅读
我有同样的问题。这对我来说很好:
1 | str(objdata).encode('utf-8') |
对我来说这很有效
的unicode(数据).encode( 'UTF-8')