Вы ошибаетесь, полагая, что строка запроса будет закодирована в windows-1251. В ссылке, которую вы даете, веб-браузер сам решает, как ее кодировать (поскольку HTTP также ничего не говорит о том, какой должна быть кодировка URL). Однако сегодня большинство браузеров предполагают, что URL-адрес должен быть закодирован в UTF-8. Так как language / detect также предполагает, что строка запроса имеет кодировку UTF-8 (и URL экранирован), вам не нужно ни заключать в кавычки, ни декодировать строку вообще. Кроме того, яндекс прекрасно поддерживает строки запросов в кодировке UTF-8. Итак, все это вместе: попробуйте
def get(self):
text = self.request.query
url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=" + text
try:
data = json.loads(urllib2.urlopen(url).read())
redirectUrl = "http://www.google.com/search?q=" + text
if data["responseData"]["language"] == 'ru':
redirectUrl = "http://yandex.ru/yandsearch?text=" + text
self.redirect(redirectUrl)
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])