Unicode проблема, правильное декодирование / кодирование строки в Python - PullRequest
4 голосов
/ 13 марта 2011

Я использую BeautifulSoup и получаю строку, подобную этой:

u'Dassault Myst\xe8re'

Это Unicode, но я хочу, чтобы он выглядел так:

'Dassault Mystère'

Я пытался

name = name.encode('utf-8'), decode(), unicode()

Ошибка, которую я продолжаю получать:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8'

Моя кодировка по умолчанию выглядит как 'ascii': sys.getdefaultencoding () возвращает 'ascii', хотяУ меня есть:

#!/usr/bin/env python
# encoding: utf-8

Вверху файла.

Надеясь решить эту повторяющуюся проблему Unicode раз и навсегда!

Спасибо

1 Ответ

1 голос
/ 13 марта 2011

Я не знаю, как и где вы получили это сообщение, но посмотрите на этот пример:

$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> txt = u'Dassault Myst\xe8re'
>>> txt
u'Dassault Myst\xe8re'
>>> print txt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 13:
  ordinal not in range(128)
>>> ^D
$ export LANG=en_US.UTF-8
$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> txt = u'Dassault Myst\xe8re'
>>> txt
u'Dassault Myst\xe8re'
>>> print txt
Dassault Mystère
>>>^D 

Итак, как вы можете видеть, если у вас есть консоль как ASCII, то во время печати происходит преобразованиеот unicode до ascii, и если есть символ вне области ASCII - генерируется исключение.

Но если консоль может принимать Unicode, то все отображается правильно.

...