Как преобразовать строку UTF со скандинавскими символами в ASCII? - PullRequest
1 голос
/ 25 марта 2010

Я хотел бы преобразовать эту строку

foo_utf = u'nästy chäräctörs with å and co.' # unicode

в это

foo_ascii = 'nästy chäräctörs with å and co.' # ASCII

.

Есть идеи, как это сделать в Python (2.6)? Я нашел модуль unicodedata , но понятия не имею, как выполнить преобразование.

Ответы [ 5 ]

4 голосов
/ 25 марта 2010

Не думаю, что ты можешь. Эти "старые символы" не могут быть закодированы как ASCII, поэтому вам придется выбрать другую кодировку (UTF-8 или Latin-1 или Windows-1252 или что-то еще).

3 голосов
/ 25 марта 2010

В модуле codecs в stdlib Python есть несколько опций, в зависимости от того, как вы хотите обрабатывать расширенные символы:

>>> import codecs
>>> u = u'nästy chäräctörs with å and co.'
>>> encode = codecs.get_encoder('ascii')
>>> encode(u) 
'
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)
>>> encode(u, 'ignore')
('nsty chrctrs with  and co.', 31)
>>> encode(u, 'replace')
('n?sty ch?r?ct?rs with ? and co.', 31)
>>> encode(u, 'xmlcharrefreplace')
('n&#228;sty ch&#228;r&#228;ct&#246;rs with &#229; and co.', 31)
>>> encode(u, 'backslashreplace')
('n\\xe4sty ch\\xe4r\\xe4ct\\xf6rs with \\xe5 and co.', 31)

Надеюсь, один из них удовлетворит ваши потребности. Больше информации доступно в документации модуля Python-кодеков .

3 голосов
/ 25 марта 2010

Попробуйте метод encode для строки.

>>> u'nästy chäräctörs with å and co.'.encode('latin-1')
'n\xe4sty ch\xe4r\xe4ct\xf6rs with \xe5 and co.'
2 голосов
/ 25 марта 2010

Это действительно вопрос Django, а не вопрос Python. если строка находится в одном из ваших файлов .py, убедитесь, что в верхней части файла есть следующая строка: -*- coding: utf-8 -*-

кроме того, ваша строка должна иметь тип "unicode" (u'foobar ')

И затем убедитесь, что ваша HTML-страница работает в Unicode:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

Это должно сделать весь трюк. Нет необходимости кодировать / декодировать и т. Д., Просто убедитесь, что все в кодировке Unicode, и вы в безопасности.

2 голосов
/ 25 марта 2010

Вы также можете использовать модуль unicodedata (http://docs.python.org/library/unicodedata.html), предоставляемый в python, для преобразования большого количества значений Unicode в вариант Ascii. IE исправляет различные "и такие". Следуйте этому методом encode () и вы можете полностью очистить строку.

Метод, который в основном используется для нормализации unicodedata и передачи ему флага NFKC.

...