История изменений
Исправление Virtuos86, (текущая версия) :
Правда не до конца понимаю, что здесь происходит. Буду признателен, если кто-нибудь по полочкам разберет
Надо понять очень простую штуку: внутре Python оперирует Юникодом, для него это родное представление текста. И да, объекты Юникода — это не строки, у строк всегда есть кодировка. Кодировки-шмодировки — это суть способы представления Юникода. Поэтому, чтобы работать в Python с Юникодом, строки нужно раскодировать, этим и занимается метод decode
— декодирует из строки в какой-то кодировке в Юникод. Соответственно, чтобы из Юникода получить строку в некой кодировке, используется метод encode
, который кодирует последовательность юникодных символов в байты согласно указанной кодовой странице.
'ïàðàìåòðû îòîáðàæåíèÿ êîíêðåòíîãî çíàêà ïî øàáëîíó'.encode('ISO-8859-1').decode('cp1251')
ISO-8859-1
, что неминуемо закончится фейлом.Но если предположить, что кто-то невнимательно копипастил и переписать пример как
>>> print u'ïàðàìåòðû îòîáðàæåíèÿ êîíêðåòíîãî çíàêà ïî øàáëîíó'.encode('ISO-8859-1').decode('cp1251')
параметры отображения конкретного знака по шаблону
>>>
ISO-8859-1
кодируется Юникод.Да, в случае Python 3 и изначальный пример корректен, поскольку в третьем питоне строки — это Юникод объекты, а не последовательности байтов, как в Python 2.
Исходная версия Virtuos86, :
Правда не до конца понимаю, что здесь происходит. Буду признателен, если кто-нибудь по полочкам разберет
Надо понять очень простую штуку: внутре Python оперирует Юникодом, для него это родное представление текста. И да, объекты Юникода — это не строки, у строк всегда есть кодировка. Кодировки-шмодировки — это суть способы представления Юникода. Поэтому, чтобы работать в Python с Юникодом, строки нужно раскодировать, этим и занимается метод decode
— декодирует из строки в какой-то кодировке в Юникод. Соответственно, чтобы из Юникода получить строку в некой кодировке, используется метод encode
, который кодирует последовательность юникодных символов в байты согласно указанной кодовой странице.
'ïàðàìåòðû îòîáðàæåíèÿ êîíêðåòíîãî çíàêà ïî øàáëîíó'.encode('ISO-8859-1').decode('cp1251')
ISO-8859-1
.Но если предположить, что кто-то невнимательно копипастил и переписать пример как
>>> print u'ïàðàìåòðû îòîáðàæåíèÿ êîíêðåòíîãî çíàêà ïî øàáëîíó'.encode('ISO-8859-1').decode('cp1251')
параметры отображения конкретного знака по шаблону
>>>
ISO-8859-1
кодируется Юникод.