Python: вопрос по кодированию - PullRequest
0 голосов
/ 16 июля 2011

Я пытаюсь понять кодирование в python, и я думаю, что мне почти удалось это понять.Итак, вот некоторый код, который я объясню, и я хотел бы, чтобы вы проверили мои мысли:)

text = line.decode( encoding )
print "type(text) = %s" % type(text)
iso_8859_1 = text.encode('latin1')
print "type(iso_8859_1) = %s" % type(iso_8859_1)
unicodeStr = text.encode('utf-8')
print "type(unicodeStr) = %s" % type(unicodeStr)

Итак, первая строка

text = line.decode( encoding )

преобразует данную строку, заданную вкодирование "кодировка" в текстовом формате Unicode Python.Поэтому на выходе получается

type(text) = <type 'unicode'>

Итак, теперь я использую исходный текст из моего файла в стиле кодировки utf-8, а для остального кода «text» - это текст utf-8.

Теперь я хочу преобразовать (по какой-либо причине) текст utf-8 в некоторые другие вещи, например, в latin1, что делается с помощью "text.encode ('latin1')".Вывод моего кода в этом случае будет

type(iso_8859_1) = <type 'str'>
type(unicodeStr) = <type 'str'>

Теперь, единственный вопрос, который остается для меня: почему тип в двух последних случаях 'str', а не 'latin1' или 'unicode'.Это то, что мне до сих пор неясно.

Не являются ли последние строки "iso_8859_1" и "unicodeStr" не кодированными в "latin1" или "unicode" соответственно?

1 Ответ

1 голос
/ 16 июля 2011

Во-первых, utf8! = Unicode.
str - это, по сути, последовательность байтов, а кодировка - это метод интерпретации этой последовательности, а unicode - это, ну, в общем, юникод.
Джоэл написал отличный пост на эту тему http://www.joelonsoftware.com/articles/Unicode.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...