.. _charset:

===================
Кодировка документа
===================

Для чего нужно знать кодировку
------------------------------

По-умолчанию, кодировка данных, полученных с сервера, определяется автоматически. Естественно, это имеет смысл только для текстовых данных. Grab использует кодировку документа, чтобы:

* построить DOM-дерево документа
* получить текст документа в unicode-виде.
* провести поиск unicode-строки в документе
* преобразовать unicode-данные в байтовую строку для отправки в запросе

Оригинальное содержимое документа доступно в аттрибуте `body` объекта `response`, unicode-представление документа можно получить методом `unicode_body()` объекта `response`::

    >>> g.go('http://yandex.ru')
    <grab.response.Response object at 0x11bea90>
    >>> type(g.response.body)
    <type 'str'>
    >>> type(g.response.unicode_body())
    <type 'unicode'>
   
Алгоритм определения кодировки
------------------------------

Алгоритм определения кодировки документа проверяет несколько источников, в следующем порядке:

* мета-тэг <meta content="Http-Equiv" >
* xml-декларация (в случае XML-документа)
* значение HTTP-заголовка "Content-Type:"

Если кодировку определить не удалось или было найдено некорректное имя кодировки, то по-умолчанию, используется кодировка UTF-8.

Опция задания кодировки
-----------------------

Вы можете принудительно задать кодировку документа (отлючив её автоматическое определение) опцией :ref:`option_charset`.
