Кодировка POST-запроса Python - PullRequest
       19

Кодировка POST-запроса Python

1 голос
/ 27 февраля 2012

вот ситуация, я отправляю POST-запросы и пытаюсь получить ответ с проблемой Python, так как он искажает нелатинские буквы, чего не происходит, когда я получаю ту же страницу с прямой ссылкой (без результатов поиска), но запросы POST не будут генерировать ссылку

вот что я делаю:

import urllib
import urllib2
url = 'http://donelaitis.vdu.lt/main_helper.php?id=4&nr=1_2_11'
data = 'q=bus&ieskoti=true&lang1=en&lang2=en+-%3E+lt+%28+71813+lygiagre%C4%8Di%C5%B3+sakini%C5%B3+%29&lentele=vertikalus&reg=false&rodyti=dalis&rusiuoti=freq' 
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
file = open("pagesource.txt", "w")
file.write(the_page)
file.close()

всякий раз, когда я пытаюсь

thepage = the_page.encode('utf-8')

я получаю эту ошибку:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 1008: ordinal not in range(128)

всякий раз, когда я пытаюсь изменить заголовок ответа, Content-Type: text / html; charset = utf-8, я делаю

response['Content-Type'] = 'text/html;charset=utf-8'

Я получаю эту ошибку:

AttributeError: addinfourl instance has no attribute '__setitem__'

Мой вопрос: можно ли редактировать или удалять заголовки ответа или запроса?если нет, есть ли другой способ решения этой проблемы, кроме копирования исходного кода в notepad ++ и исправления кодировки вручную?

Я новичок в Python и интеллектуальном анализе данных, очень надеюсь, что вы дадите мне знать, если я; mделать что-то не так

спасибо

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Почему бы вам не попробовать thepage = the_page.decode('utf-8') вместо encode, поскольку вы хотите перейти от текста в кодировке UTF-8 к кодировке Unicode - кодирование - внутренние строки?

1 голос
/ 27 февраля 2012

Две вещи. Во-первых, вы не хотите кодировать ответ, вы хотите его декодировать:

thepage = the_page.decode('utf-8')

А во-вторых, вы не хотите устанавливать заголовок ответа, вы устанавливаете его по запросу, используя метод add_header:

req.add_header('Content-Type', 'text/html;charset=utf-8')
...