将multichar%xx转义转换为unicode

2024-03-28 16:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在写这篇文章的过程中,我让这篇文章发挥了作用。不管怎样,在这里它是有用的或者解决方案不是最佳的。在

我有一个unicode字符串u'http://en.wikipedia.org/wiki/Espa%C3%B1ol',我想从中得到u'http://en.wikipedia.org/wiki/Español'。我尝试使用urllib.unquote给我u'http://en.wikipedia.org/wiki/Espa\xc3\xb1ol'。在


Tags: 字符串orghttp过程wikiunicodeurllibwikipedia
2条回答

问题是%C3%B1的含义取决于字符串的编码。在

作为Unicode,它的意思是ñ。作为拉丁语-1,它也意味着ñ。作为UTF-8,它的意思是ñ。在

所以,在从UTF-8解码之前,您需要取消这些字符的转义。在

换句话说,在某个地方,你所做的相当于:

u = urllib.unquote(s.decode('utf-8'))

别那样做。你应该做的是:

^{pr2}$

如果您使用的某个框架在看到字符串之前已经对其进行了解码,请重新编码、取消引用并重新解码:

u = urllib.unquote(u.encode('utf-8')).decode('utf-8')

但是最好不要让框架来解码字符集,而是首先引用编码的字符串。在

字符串不必要是unicode,因此首先转换为字节字符串表示形式,然后解码为unicode,如下所示:

urllib.unquote(str(u'http://en.wikipedia.org/wiki/Espa%C3%B1ol')).decode('utf8')

相关问题 更多 >