noob-запросы по методам Юникод и str в Python - PullRequest
2 голосов
/ 08 декабря 2011

Я хотел бы получить разъяснения по методам Unicode и str в Python. После прочтения некоторых объяснений на Unicode, есть еще пара сомнений, я надеюсь, что люди могут помочь мне:

  1. Правильно ли мне сказать, что при объявлении строки Unicode, например, word=u'foo', python использует кодировку терминала и декодирует foo в, например, UTF-8, и присваивает word шестнадцатеричное представление в Unicode

  2. Так, в общем, процесс печати символов в файле, всегда декодирующий поток байтов в соответствии с кодировкой в ​​представление Unicode, перед отображением отображенных символов?

  3. В моем терминале, почему 'é'.lower() или str('é') отображается в шестнадцатеричном формате '\xc3\xa9', тогда как 'a'.lower () - нет?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2011

Во-первых, мы должны прояснить, что речь идет только о Python 2.Python 3 отличается.

  1. Вы правы.Но если вы напишите u «abcd» в py-файле, объявление кодировки исходного файла определит, как интерпретатор расшифрует вашу строку.
  2. Сначала необходимо декодировать его, а затем кодироватьэто и распечатать.В Python 2 НЕ распечатывайте Unicode напрямую!В противном случае, если система кодирует его несовместимым способом (например, «ascii»), возникнет исключение.Вы должны сделать все это явно.

  3. Краткий ответ: «а» не обязательно представлять в «\ x61», «а» просто более читабельно.Более длинный ответ: обычно в интерактивной оболочке, если вы введете значение и нажмете клавишу ввода, Python покажет repr () вашей строки.Я думаю, что "repr" попытается напечатать все в представлении ascii.Для «а» это уже ascii, поэтому это напрямую излагается.Для строки "é" это двоичный поток в кодировке UTF-8, поэтому Python экранирует каждый байт и печатает как 'xc3 \ xa9'

0 голосов
/ 09 декабря 2011
  1. Оператор word = u'foo' назначает Unicode-строку объект , а не "шестнадцатеричное представление". Объекты Unicode представляют собой последовательности текстовых символов. Кроме того, неправильно думать о декодировании в этом контексте. Unicode не кодировка, и при этом он не "имеет" кодировку.
  2. Да. Декодирование: кодирование.
  3. Для repr строкового литерала non-unicode Python будет использовать sys.stdin.encoding; для repr строкового литерала unicode Python будет использовать "unicode_escape".
0 голосов
/ 08 декабря 2011
  1. См. http://www.python.org/dev/peps/pep-0263/ о том, как указать кодировку исходного файла Python.Для интерпретатора Python есть переменная окружения PYTHONIOENCODING.

  2. Какую ОС вы используете?

0 голосов
/ 08 декабря 2011

Я не думаю, что Python выполняет какое-либо автоматическое кодирование или декодирование при вводе / выводе консоли. Учтите следующее:

>>> 'é'
'\xc3\xa9'
>>> 'é'.decode('UTF-8')
u'\xe9'

Вы заметите, что \xe9 - это кодовая точка Unicode для 'LATIN SMALL LETTER E WITH ACUTE' , тогда как \xc3\xa9 - это последовательность байтов, соответствующая тому же символу в UTF-8.

Все меняется в Python 3, так как все строки в Unicode. Я не уверен в правилах там.

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