Почему Python выводит строку и юникод одного и того же значения по-разному? - PullRequest
3 голосов
/ 06 мая 2010

Я использую Python 2.6.5, и когда я запускаю следующее в оболочке Python, я получаю:

>>> print u'Andr\xc3\xa9'
André
>>> print 'Andr\xc3\xa9'
André
>>>

Какое объяснение выше? Учитывая u'Andr \ xc3 \ xa9 ', как я могу правильно отобразить вышеупомянутое значение на html-странице, чтобы оно показывало Андре вместо André?

Ответы [ 3 ]

11 голосов
/ 06 мая 2010

'\xc3\xa9' - это кодировка UTF-8 символа Unicode u'\u00e9' (который также можно указать как u'\xe9'). Таким образом, вы можете использовать u'Andr\u00e9' или u'Andr\xe9'.

Вы можете конвертировать из одного в другое:

>>> 'Andr\xc3\xa9'.decode('utf-8')
u'Andr\xe9'
>>> u'Andr\xe9'.encode('utf-8')
'Andr\xc3\xa9'

Обратите внимание, что причина, по которой print 'Andr\xc3\xa9' дал вам ожидаемый результат, заключается только в том, что кодировкой вашей системы по умолчанию является UTF-8. Например, в Windows я получаю:

>>> print 'Andr\xc3\xa9'
André

Что касается вывода HTML, то это зависит от того, какую веб-среду вы используете и какую кодировку вы выводите на странице HTML. Некоторые фреймворки (например, Django) автоматически преобразуют значения Юникода в правильную кодировку, в то время как для других потребуется сделать это вручную.

1 голос
/ 06 мая 2010

Попробуйте это:

>>> unicode('Andr\xc3\xa9', 'utf-8')
u'Andr\xe9'
>>> print u'Andr\xe9'
André

Это может ответить на ваш вопрос.

РЕДАКТИРОВАТЬ: или посмотреть ответ выше

0 голосов
/ 06 мая 2010

Я не уверен, но я предполагаю, что различные операции кодирования применяются к операции печати.Вероятно, некоторые проблемы с UTF-8 и Unicode.

Для HTML вам необходимо кодировать определенные символы, используя синтаксис HTML для Unicode.Я думаю, что модуль Python codecs может помочь вам.

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