2009-09-27 2 views
0

Я использую механизм Google для создания веб-сайта, и у меня возникают проблемы со специальными символами. Я думаю, что я свел проблему к этим двум примерам кода:Ñ не отображается на веб-сайте движка Google

request = urlfetch.fetch(
     url=self.WWW_INFO, 
    payload=urllib.urlencode(inputs), 
    method=urlfetch.POST, 
    headers={'Content-Type': 'application/x-www-form-urlencoded'}) 
print request.content 

Предыдущий код выводит на экран содержимое просто отлично, показывая специальные символы. Но, как правильно использовать рамки для отображения что-то использует:

request = urlfetch.fetch(
     url=self.WWW_INFO, 
    payload=urllib.urlencode(inputs), 
    method=urlfetch.POST, 
    headers={'Content-Type': 'application/x-www-form-urlencoded'}) 
self.response.out.write(request.content) 

Который не отображает специальные символы, а вместо этого просто печатает. Что я должен делать, чтобы он отображался правильно?

Я знаю, что чего-то не хватает, но я не могу понять, что это такое. На сайте установлены <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">, и я пробовал с charset=UTF-8 без успеха.

Буду признателен за любые советы, которые могут указывать на меня в правильном направлении.

ответ

1

Вы должны получить charset из заголовка content-type в результатах выборки, использовать его для декодирования байтов в Юникоде, затем в ответ задать заголовок с вашим любимым кодированием (я предлагаю utf-8 - нет веских оснований для этого) и испускать кодировку текста Юникода через этот кодек. Пропуск через unicode не является строго необходимым (когда вы ничего не делаете с содержимым, просто подпрыгивая от него обратно к ответу, вы можете использовать идентичный тип содержимого и кодировку для того, что вы получили), но рекомендуется по общим причинам (используйте закодированные байтовые строки только на входе/выходе, всегда сохраняйте весь текст «внутри» вашего приложения как unicode).

IOW, ваша проблема, по-видимому, в основном состоит в том, что вы неправильно настраиваете заголовки ответа.

+0

Я проверил с firebug, и кажется, что движок приложения автоматически устанавливает заголовок содержимого в utf-8. –

+0

Это по умолчанию, да, но вы можете установить его на что-то еще, если хотите. –

+1

Исправлено. То, что я получал, было кодировкой ISO-8859-1, поэтому мне пришлось сделать unicode (request.content, iso-8859-1), чтобы правильно преобразовать его в Юникод перед его печатью. –

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