2024-03-28 16:26:13 发布
网友
在写这篇文章的过程中,我让这篇文章发挥了作用。不管怎样,在这里它是有用的或者解决方案不是最佳的。在
我有一个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'。在
u'http://en.wikipedia.org/wiki/Espa%C3%B1ol'
u'http://en.wikipedia.org/wiki/Español'
u'http://en.wikipedia.org/wiki/Espa\xc3\xb1ol'
问题是%C3%B1的含义取决于字符串的编码。在
%C3%B1
作为Unicode,它的意思是ñ。作为拉丁语-1,它也意味着ñ。作为UTF-8,它的意思是ñ。在
ñ
ñ
所以,在从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')
问题是
%C3%B1
的含义取决于字符串的编码。在作为Unicode,它的意思是
ñ
。作为拉丁语-1,它也意味着ñ
。作为UTF-8,它的意思是ñ
。在所以,在从UTF-8解码之前,您需要取消这些字符的转义。在
换句话说,在某个地方,你所做的相当于:
别那样做。你应该做的是:
^{pr2}$如果您使用的某个框架在看到字符串之前已经对其进行了解码,请重新编码、取消引用并重新解码:
但是最好不要让框架来解码字符集,而是首先引用编码的字符串。在
字符串不必要是unicode,因此首先转换为字节字符串表示形式,然后解码为unicode,如下所示:
相关问题 更多 >
编程相关推荐