Python UTF-8 акценты проблема - PullRequest
       6

Python UTF-8 акценты проблема

0 голосов
/ 06 августа 2011

У меня возникли некоторые проблемы с акцентами.

Я написал скрипт на Python, который получает слово " refeiçà £ o " из некоторого ввода (выборка IMAP), это словона португальском языке, и мне нужно преобразовать его, чтобы быть читаемым человеком.После декодирования он должен выглядеть как " refeição ", но я не получаю этот результат ...

>>> print a 
refeição
>>> ENCODING = locale.getpreferredencoding()
>>> print ENCODING
UTF-8
>>> print a.encode(ENCODING)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128)
>>> a.decode('utf-8')
u'refei\xe7\xe3o'
>>> print a.decode('utf-8')
refeição

Обновлено:

root@ticuna:/etc/scripts# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Кроме того, эти словавставляются в базу данных MySQL, и «нечитаемые» символы отображаются так же, как в терминале.Сортировка таблицы: utf8_general_ci

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Похоже, что ваше окно терминала отображает текст в однобайтовой кодировке ISO-8859-1 ("latin-1"), но ваш интерпретатор python считает , что терминал говорит на UTF-8.Из u'refei\xe7\xe3o' видно, что Python имеет правильное внутреннее представление букв Португалии.По-видимому, команда печати затем преобразует внутреннее представление в UTF-8 и отправляет его на ваш терминал, который производит бред, когда терминал интерпретирует этот UTF-8 как ISO-8859-1.

Исправление должно сделатьваш языковой стандарт совпадает с тем, что делает ваш терминал - либо изменив языковой стандарт, либо убедившись, что ваш терминал имеет utf-8.

0 голосов
/ 10 сентября 2011

Как обойти, я удаляю все акценты.

Вот код, который я использовал:

def remove_accents(s):
   return ''.join((c for c in unicodedata.normalize('NFD', s.decode('utf-8')) if unicodedata.category(c) != 'Mn'))

На основании этого ответа: Каков наилучший способ удаления акцентов в строке Unicode Python?

...