将multichar%xx转换为unicode

时间:2015-05-22 20:30:37

标签: python unicode urllib

在写这篇文章的过程中,我得到了这个。无论如何它都是有用的,或者解决方案不是最佳的。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

作为Unicode,它意味着ñ。作为Latin-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')

但最好不要让框架手工编码解码但仍然是引用编码的字符串。