Как обрабатывать специальные символы в комментариях и жестко закодированные строки в файле python? - PullRequest
0 голосов
/ 22 июня 2011

Этот вопрос направлен на следующие два сценария:

  1. Вы хотите добавить строку со специальными символами в переменную:

    special_char_string = "äöüáèô"

  2. Вы хотите разрешить использование специальных символов в комментариях.

    # This a comment with special characters in it: äöà etc.

В настоящий момент я выполняю следующие действия:

# -*- encoding: utf-8 -*-
special_char_string = "äöüáèô".decode('utf8')
# This a comment with special characters in it: äöà etc.

Работает нормально.

Это рекомендуемый способ?Или есть лучшее решение для этого?

Ответы [ 2 ]

4 голосов
/ 22 июня 2011

Python проверит первую или вторую строку на наличие спецификации кодирования, подобной emacs / vim.

Точнее, первая или вторая строка должны соответствовать регулярному выражению "кодирования [: =] \ s * ([-. \ ш] +)».Первая группа этого выражения затем интерпретируется как имя кодировки.Если кодировка неизвестна Python, во время компиляции возникает ошибка.

Источник: PEP 263

(спецификация также заставит Python интерпретировать источниккак UTF-8.

Я бы порекомендовал использовать это значение вместо .decode('utf8')

# -*- encoding: utf-8 -*-
special_char_string = u"äöüáèô"

В любом случае special_char_string будет содержать объект unicode, больше неstr. Как вы можете видеть, они оба семантически эквивалентны:

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True

И наоборот:

>>> u"äöüáèô".encode('utf8')
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'
>>> "äöüáèô"
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'

Однако есть техническое отличие: если вы используете U«что-то», оно будет инструктировать синтаксический анализатор, что есть литерал Unicode, это должно быть немного быстрее.

2 голосов
/ 22 июня 2011

Да, это рекомендуемый способ для Python 2.x, см. PEP 0263 . В Python 3.x и выше кодировкой по умолчанию является UTF-8, а не ASCII, поэтому вам это не нужно. См. PEP 3120 .

...