我正在为维基百科编写一个简单的搜索算法。当我发送带有重音字符和其他常规英语字符的字符的查询时,我遇到了麻烦。错误返回的查询是:
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 - 塔斯基%20paradox&安培;丙=链接和安培; pllimit = 33&安培;格式= 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。
答案 0 :(得分:1)
我在Python源代码中没有看到您在查询中发送的任何非ascii字符编码的任何痕迹。对于使用除ascii之外的任何URL的URL(包括其中的查询字符串),您需要(如果它们已经不是unicode),则在utf-8中编码它们并对结果进行百分比转义(对于后者使用函数{{ 1}}来自标准Python库模块urllib.quote_plus
,当然还有编码,unicode字符串的urllib
方法 - 如果你需要从不同编码的字节串中创建一个unicode字符串,请使用字节字符串的.encode('utf8')
- 或者当然是它所在的编码名称; - )。