Python: проблемы с UTF-8 (снова ...) - PullRequest
0 голосов
/ 29 марта 2010

У меня есть база данных, которая синхронизируется с внешним веб-источником два раза в день. Этот веб-источник содержит несколько записей, которые имеют имена и некоторую дополнительную информацию об этих именах.

Некоторые из этих имен глупы, и я хочу переименовать их при вставке в мою собственную базу данных. Чтобы переименовать эти глупые имена, у меня есть стандартный словарь как таковой:

RENAME_TABLE = { "Wσird" : "Weird", ... }

Как видите, именно здесь вступает в игру UTF-8. Это функция, которая выполняет переименование всех проблемных записей:

def rename_all_entries():
    all_keys = RENAME_TABLE.keys()
    entries = Entry.objects.filter(name__in=all_keys)
    for entry in entries:
        entry.name = RENAME_TABLE[entry.name]
        entry.save()

Поэтому он пытается найти старое имя в RENAME_TABLE и переименовывает запись, если найдена. Тем не менее, я получаю исключение KeyError при использовании RENAME_TABLE[entry.name].

Теперь я потерялся, что мне делать? У меня есть ...

# -*- coding: utf-8 -*-

... в верхней части файла Python.

1 Ответ

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

Ошибка, которую вы получаете, связана с тем, что вы хотите, чтобы строка Unicode отсутствовала в словаре. Вспомните, что в Python 2.x (я полагаю, вы используете это) тип строки по умолчанию - 8-битный, а не юникод, поэтому вы фактически вводите словарь с помощью 8-битных строк. Чтобы объявить строку в Юникоде, используйте «моя строка в Юникоде». Тогда это должно быть принято в качестве ключа.

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