2010-09-22 67 views
0

我正在寫一個簡單的維基百科搜索算法。當我發送含有口音和其他字符的英文不常見的字符時,我遇到了麻煩。在返回錯誤的查詢是:
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 &道具=鏈接& 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
使用擴展ascii字符爲維基媒體API

但查詢工作正常,如果有簡單的字符如「分形」。我應該如何改變查詢的格式來完成這項工作?

我的代碼公開源於:http://code.google.com/p/wikipediafoundation/source/browse/。請看一下hg/src/list.py。

+0

沒有「擴展ASCII」這樣的東西。 ASCII是ASCII。 – 2010-09-22 02:33:19

回答

1

我在您的Python源代碼中看不到任何跟蹤編碼您在查詢中發送的任何非ascii字符。對於使用ascii之外的任何URL的URL(包括查詢字符串),您需要(如果它們已經不是Unicode字符,則將它們編碼爲utf-8並使用百分號 - 轉義結果)(對於後者,使用函數urllib.quote_plus標準的Python庫模塊urllib,以及編碼,當然還有unicode字符串的.encode('utf8')方法 - 如果需要從一個不同編碼的字節字符串中生成一個unicode字符串,請使用字節字符串的.decode('latin-1')或任何名稱的編碼它,當然;-)。

+0

我將我的代碼更改爲以下版本,並且可以正常工作! t = urllib2.quote(tree.name.encode('utf8')) s =「http://en.wikipedia.org/w/api.php?action=query&titles=%s&prop=links&pllimit=%d&format=xml 「%(t,plimit) – 2010-09-23 04:36:02