将多字符%xx转义转换为unicode



在写这篇文章的过程中,我让它发挥了作用。无论如何,它都在这里,以防它有用或解决方案不太理想。

我有一个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/Espaxc3xb1ol'

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

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

因此,在从UTF-8进行解码之前,您需要取消对这些字符的捕获。

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

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

不要那样做。你应该做:

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

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

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')

相关内容

  • 没有找到相关文章

最新更新