использование расширенных кодов Ascii с Python - PullRequest
2 голосов
/ 11 декабря 2011

Я создал словарь с Python, но у меня проблемы с расширенными кодами Ascii.

Цикл, в котором создается словарь: (число от 128 до 164: é, à и т. Д.)

#extented ascii codes
i = 128
while i <= 165 :
    dictionnary[chr(i)] = 'extended ascii'
    i = i + 1

Но когда я пытаюсь использовать словарь:

    >>> dictionnary['è']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '\xc3\xa8'

У меня есть # - - кодировка: utf-8 - - в заголовке скрипта Python. Я пробовал кодировать, декодировать и т. Д., Но результат всегда плохой.

Чтобы понять, что происходит, я попробовал:

>>> ord('é')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found

и

    >>> ord(u'é')
233

Я запутался с ord (u'é '), потому что' é '- это номер 130 в расширенной таблице ascii, а не 233.

Я понимаю, что расширенные коды ascii содержат "два символа", но я не понимаю, как решить проблему со словарем?

Заранее спасибо! : -)

1 Ответ

4 голосов
/ 11 декабря 2011

Используйте unichr вместо chr. Функция chr создает строку, содержащую один байт, тогда как unichr создает строку, содержащую один символ Unicode. Наконец, выполните поиск с использованием символов Unicode: d[u'é'], потому что d['é'] будет искать кодировку utf-8 символа é.

В вашем коде есть 3 вещи: строка в кодировке латиницы-1, строка в кодировке утф-8 и строка в кодировке Юникод. Чтобы понять, что у вас есть в любой момент времени, требуется много знаний о том, как работает Python, и приличное понимание Unicode и кодировок.

Ни один ответ о кодировках и Unicode не обходится без ссылки на статью Джоэла Спольски по этому вопросу: Абсолютный минимум каждый разработчик программного обеспечения, абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)

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