2010-10-12 2 views
1

Я хочу использовать Google Language Detection API в своем приложении, чтобы определить язык параметра url. Например, пользовательские запросы urlКак декодировать строку для использования с API обнаружения Google Language?

http://myapp.com/q ?Это тест

и получает сообщение «Русский». Я делаю это так:

def get(self):            
     url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q="+self.request.query       
     try: 
      data = json.loads(urllib2.urlopen(url).read())     
      self.response.out.write('<html><body>' + data["responseData"]["language"] +'</body></html>')         
     except urllib2.HTTPError, e: 
      self.response.out.write("HTTP error: %d" % e.code) 
     except urllib2.URLError, e: 
      self.response.out.write("Network error: %s" % e.reason.args[1]) 

но всегда получаю «английский язык», как результат, потому что URL кодируется в

http://myapp.com/q?%DD%F2%EE%20%F2%E5%F1%F2

Я попытался urllib.quote , urllib.urlencode не повезло.

Как мне декодировать этот url для Google Api?

ответ

3

Может быть urllib.unquote является то, что вы ищете:

>>> from urllib import unquote 
>>> unquote("%DD%F2%EE%20%F2%E5%F1%F2") 

Это дает вам строку, в которой символы находятся в любой кодировке, вы использовали в URL. Если вы хотите перекодировать его в другую кодировку (скажем, UTF-8), вы должны создать unicode объект первым, а затем использовать encode метод unicode объекта перекодировать:

>>> from urllib import unquote, quote 
>>> import json, urllib2, pprint 
>>> decoded = unicode(unquote("%DD%F2%EE%20%F2%E5%F1%F2"), "windows-1251") 
>>> print decoded 
Это тест 
>>> recoded = decoded.encode("utf-8") 

На данный момент мы имеем строку UTF-8 кодируются, но это по-прежнему не подходит для быть переданы в API Google Detection Язык:

>>> recoded 
'\xd0\xad\xd1\x82\xd0\xbe \xd1\x82\xd0\xb5\xd1\x81\xd1\x82' 

Так как вы хотите, чтобы включить эту строку в URL в качестве аргумента запроса, вы должны кодировать его с использованием urllib.quote:

+0

Выглядит хорошо, когда я пытаюсь его распечатать, но когда я отправляю его в Google, это исключает исключение: UnicodeEncodeError: кодек ascii не может кодировать символы в позиции –

+0

Вы должны передать 'recoded' на' urllib. quote', чтобы получить представление, которое можно смело добавить к URL-адресу API Google Language. Я изменяю свой пример, чтобы показать это. –

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