2016-02-24 4 views
0

Я использую mitmproxy для управления возвращающимся HTML-кодом веб-страниц. Когда я использую команды в этом HTML-коде, я получил UnicodeDecodeError.UnicodeDecodeError при редактировании HTML-кода с помощью Python

Я попытался что-либо сделать, и прочитал все сообщения здесь, и все еще ничего не работало для меня.

Два примера многих вещей, которые я уже пробовал:

msg.response.content = unicode(msg.response.content, errors='ignore')) 
msg.response.content = msg.response.content.decode('utf8').encode('ascii', errors='ignore')) 

Как я могу иметь дело с этим?

+1

Являются ли эти страницы действительно UTF-8? – jwodder

+0

Довольно уверены, что это UTF-8 .. Как я могу это подтвердить? – Dan

+0

Просьба указать [mcve], в том числе строку кода, которая вызывает «UnicodeDecodeError» –

ответ

0

Попробуйте использовать менеджер mitmproxy.flow.decoded контекста, например, так:

from mitmproxy.flow import decoded 

def response(context, flow): 
    with decoded(flow.response): 
     flow.response.content = flow.response.content.replace("Google", "Noogle") 

От источника:

менеджер контекста, который декодирует запрос, ответ или сообщение об ошибке, а затем перекодирует его с тем же кодированием после выполнения блока.

Пример:

with decoded(request): 
     request.content = request.content.replace("foo", "bar") 

Примечание: Я использовал mitmproxy на Ubuntu 14.04.

+0

. Я использую более низкую версию libmproxy, но все еще использую 'libmproxy.http.decode' – Dan

0

Чтобы убедиться, что вы правильно декодируете, вам нужно будет найти в исходном коде HTML-страницы что-то вроде <meta charset="utf-8"> или <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">. Значение charset - это кодировка, которую эта страница использует.

при запуске type(msg.response.content) возвращает, что тип является str, тогда вам нужно запустить msg.response.content = msg.resposne.content.decode(u'utf-8'), где «utf-8» - это кодировка, на которой говорится, что эта страница используется. Это может также быть что-то вроде ISO-8859-1 или windows-1251 или ASCII.

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