Что не так с этим фрагментом нормализатора строки Python? - PullRequest
1 голос
/ 27 февраля 2010

Кажется, что каждый раз, когда я думаю, что освоил кодирование, я нахожу что-то новое, чтобы озадачить меня: -)

Я пытаюсь избавиться от французских акцентов из строки UTF-8:

>>> import unicodedata

>>> s = u"éèêàùçÇ"

>>> print(unicodedata.normalize('NFKD', s).encode('ascii','ignore'))

Я ожидал eeeaucC в качестве вывода и вместо этого получил AA AaA A1AA, используя Python 2.6.4 в Ubuntu 9.10 и iPython 0.10, все вещи установлены в Юникод.

Ответы [ 2 ]

1 голос
/ 27 февраля 2010

После дальнейших тестов это работает, если вместо iPython вы используете интерпретаторы Python 3 или Python 2.6.

Возможно, неправильная пользовательская настройка или ошибка.

0 голосов
/ 27 февраля 2010

python работает как надо:

$ python
Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = u"éèêàùçÇ"
>>> s
u'\xe9\xe8\xea\xe0\xf9\xe7\xc7'
>>> ord(s[0])
233

В ipython есть ошибка:

$ ipython
Python 2.6.4 (r264:75706, Dec  7 2009, 18:43:55) 
Type "copyright", "credits" or "license" for more information.

IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: s = u"éèêàùçÇ"

In [2]: ord(s[0])
Out[2]: 195

In [3]: s
Out[3]: u'\xc3\xa9\xc3\xa8\xc3\xaa\xc3\xa0\xc3\xb9\xc3\xa7\xc3\x87'

Если вы читаете его из файла, то ipython работает:

$ ipython
...
In [1]: import codecs

In [2]: s = codecs.open('s.txt', 'r', 'utf-8').read()

In [3]: s
Out[3]: u'\xe9\xe8\xea\xe0\xf9\xe7\xc7'

In [4]: ord(s[0])
Out[4]: 233
...