2013-03-16 2 views
3

Для следующих линий, которые используют urllib:Python Ответ Декодирование

# some request object exists 
response = urllib.request.urlopen(request) 
html = response.read().decode("utf8") 

Какой формат строки делает read() возвращение? Я пытаюсь понять, что из документации Python, но это совсем не упоминается. Почему существует decode? Делает decode декодировать объект до utf-8 или от utf-8? С какого формата в какой формат он декодируется? decode документация также ничего не говорит об этом. Это то, что документация Python настолько ужасна, или я не понимаю какой-то стандартной конвенции?

Я хочу сохранить этот HTML-файл в файле UTF-8. Я бы просто сделал обычную запись, или мне нужно «закодировать» что-то и написать это?

Примечание: Я знаю URLLIB осуждается, но я не могу переключиться на urllib2 прямо сейчас

+0

Спасибо за пустые голоса без комментариев ...? – darksky

+3

[Как остановить боль?] (Http://www.youtube.com/watch?v=sgHbC6udIqc) – root

+0

Удивительно, спасибо @root! – darksky

ответ

0

Задать питона:

>>> r=urllib.urlopen("http://google.com") 
>>> a=r.read() 
>>> type(a) 
0: <type 'str'> 
>>> help(a.decode) 
Help on built-in function decode: 

decode(...) 
    S.decode([encoding[,errors]]) -> object 

    Decodes S using the codec registered for encoding. encoding defaults 
    to the default encoding. errors may be given to set a different error 
    handling scheme. Default is 'strict' meaning that encoding errors raise 
    a UnicodeDecodeError. Other possible values are 'ignore' and 'replace' 
    as well as any other name registered with codecs.register_error that is 
    able to handle UnicodeDecodeErrors. 

>>> b = a.decode('utf8') 
>>> type(b) 
1: <type 'unicode'> 
>>> 

Итак, оказывается, что read() возвращает str. .decode() декодирует от UTF-8 во внутренний формат Юникода Python.

+0

По какой-то причине страница 'decode()' doc, на которой я была, была другой. Спасибо – darksky

+0

Итак, 'str' не поддерживает все символы юникода, поэтому' decode() 'прикован после' read() '? – darksky

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