我正在为维基百科写一个简单的搜索算法。当我发送一个带有重音和其他字符的查询时遇到了问题,这些字符在常规英语中是看不到的。返回错误的查询包括:
http://en.wikipedia.org/w/api.php?action=query&titles=Albrecht%20Dürer&prop=links&pllimit=33&format=xml
http://en.wikipedia.org/w/api.php?action=query&titles=Ancien%20Régime&prop=links&pllimit=33&format=xml
http://en.wikipedia.org/w/api.php?action=query&titles=Feigenbaum-Cvitanović&prop=links&pllimit=33&format=xml
http://en.wikipedia.org/w/api.php?action=query&titles=Banach–Tarski%20paradox&prop=links&pllimit=33&format=xml
http://en.wikipedia.org/w/api.php?action=query&titles=Grundzüge%20der%20Mengenlehre&prop=links&pllimit=33&format=xml
http://en.wikipedia.org/w/api.php?action=query&titles=Grundzüge%20einer%20Theorie%20der%20geordneten%20Mengen&prop=links&pllimit=33&format=xml
http://en.wikipedia.org/w/api.php?action=query&titles=Karl%20Bögel&prop=links&pllimit=33&format=xml
但是如果有像"Fractals“这样的简单字符,查询就能正常工作。我应该如何更改查询的格式才能使其正常工作?
我的代码在http://code.google.com/p/wikipediafoundation/source/browse/上是开源的。请查看hg/src/list.py。
发布于 2010-09-22 10:25:29
我在Python源代码中看不到任何关于如何对查询中发送的非ascii字符进行编码的痕迹。对于使用ascii以外的任何东西的URL(包括其中的查询字符串),您需要(如果它们还没有使用unicode,那么)将它们编码为utf-8,并对结果进行百分号转义(对于后者,使用标准Python库模块urllib
中的函数urllib.quote_plus
,当然,对于编码,使用unicode字符串的.encode('utf8')
方法--如果您需要从编码方式不同的字节字符串生成unicode字符串,则使用字节字符串的.decode('latin-1')
--当然,或者使用它所在的编码的名称;-)。
https://stackoverflow.com/questions/3765855
复制相似问题