2010-09-22 6 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 для wikimedia api

Но запрос работает отлично, если есть простой символ такого как «Фракталы». Как мне изменить формат запроса, чтобы сделать эту работу?

Мой код открыт по адресу: http://code.google.com/p/wikipediafoundation/source/browse/. Посмотрите на hg/src/list.py.

+0

Нет такой вещи, как «расширенный ASCII». ASCII - ASCII. –

ответ

1

Я не вижу в вашем источнике Python какой-либо информации о том, как вы находитесь , кодируя любые символы, отличные от ascii, которые вы отправляете в запросе. Для URL-адресов (включая строки запроса в них), используя что-либо за пределами ascii, вам необходимо (сделать их unicode, если они уже не являются), затем закодировать их в utf-8 и проценте - избежать результата (для последней функции использования urllib.quote_plus из стандартный библиотечный модуль Python urllib, а для кодирования, конечно, код .encode('utf8') строки юникода - если вам нужно сделать строку юникода из строки с байтом с различным кодированием, используйте строку байта .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) –

Смежные вопросы