由于C扩展中的一些错误,我获得了带有str实例的unicode数据,或者按顺序排列,没有编码的str和unicode文字。
因此,例如,这是一个有效的unicode文字。
>>> u'\xa1Se educado!'而UTF-8编码的str是:
>>> '\xc2\xa1Se educado!'但是,我得到了一个带有unicode文字的str:
>>> '\xa1Se educado!'我需要创建一个unicode实例。使用unicode()不起作用,因为它需要编码。我以为''.join(unichr(ord(x)) for x in s)能做我想做的事,但它真的很丑。必须有更好的解决办法。有什么想法吗?
发布于 2014-05-14 23:33:41
正如我所怀疑的,无论python对unicode使用什么“编码”,都必须有一种方法来对其进行解码,这就是raw_unicode_escape。
>>> unicode('\xa1Se educado!', 'raw_unicode_escape')
u'\xa1Se educado!'发布于 2014-05-15 15:16:52
我得到一个带有unicode文字的str:
'\xa1Se educado!'
不完全是,\xa1不是特定于Unicode的转义.字节字符串中的\xa1表示字节号161,而Unicode字符串中的\xa1表示字符(代码点)161--与\u00A1相同。
您所拥有的是一个字节字符串,它包含¡Se educado!的ISO-8859-1编码,而不是UTF-8编码。在编码每个字节数的ISO-8859-1中,每个字节数恰好与相同代码点号的Unicode字符匹配。若要将ISO-8859-1字节字符串解码为Unicode字符串,请使用:
>>> '\xa1Se educado!'.decode('iso-8859-1')
u'\xa1Se educado!'尽管实际上,如果您使用的是Windows,那么编码可能是代码页1252 ('windows-1252'),而不是ISO8859-1。它们的编码方式相似,但并不完全相同。代码页1252是默认的‘ANSI’代码页,Windows用于西欧和美国地区的非Unicode应用程序。如果您从运行在同一台计算机上的Windows应用程序中获取此数据,则应使用编码'mbcs'对其进行解码,该编码与特定于地区的默认代码页相对应。
这些是无法容纳所有Unicode字符的遗留编码。您可能会发现C扩展根本无法处理当前代码页设置之外的字符。
https://stackoverflow.com/questions/23666653
复制相似问题