我正在为维基百科写一个简单的搜索算法。当我发送带有重音符号和其他普通英语中看不到的字符的查询时,我遇到了问题。错误返回的查询是:
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/列表.py. 在
在Python源代码中,我看不到任何在查询中发送的非ascii字符是如何编码的。对于使用ascii以外的任何内容的url(包括其中的查询字符串),您需要(如果它们已经不是unicode的话,那么就将它们设为unicode)用utf-8编码,并对结果进行百分数转义(对于后者,使用标准Python库模块
urllib
中的函数urllib.quote_plus
,对于编码,当然,unicode字符串的.encode('utf8')
方法如果需要从不同编码的字节字符串生成unicode字符串,请使用字节字符串的.decode('latin-1')
或它所使用的任何编码名称;-)。在相关问题 更多 >
编程相关推荐