我正在使用xlrd解析xsl文件.大多数事情都很好.我有一个字典,其中键是字符串,值是字符串列表.所有键和值都是unicode.我可以使用str()
方法打印大部分键和值.但是有些值具有unicode字符 - \u2013
我得到了上述错误.
我怀疑这种情况正在发生,因为这是嵌入在unicode中的unicode,而python解释器无法对其进行解码.那我怎么能摆脱这个错误呢?
提前致谢.
Len*_*bro 76
您也可以打印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')
Run Code Online (Sandbox Code Playgroud)
结果是一个str包含一个字节序列,它是所讨论字符的uTF8表示:
'\xe2\x80\x93'
Run Code Online (Sandbox Code Playgroud)
你可以打印出来:
>>> print '\xe2\x80\x93'
–
Run Code Online (Sandbox Code Playgroud)
因为这里str(u'\u2013')
导致错误因此用于isinstance(foo,basestring)
检查unicode/string,如果不是类型基本字符串将其转换为Unicode然后应用编码
if isinstance(foo,basestring):
foo.encode('utf8')
else:
unicode(foo).encode('utf8')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
112167 次 |
最近记录: |