Я уверен, что этот вопрос не относится к django, но, поскольку я не смог найти решения своей проблемы в других вопросах, касающихся python и кодировок, я собираюсь задать этот вопрос.
Мне нужно добавить новые функции на существующий веб-сайт, который написан на PHP с использованием MySQL в качестве бэкэнда. Я проверил базу данных и создал модели для таблиц, которые я собираюсь использовать. Однако существует проблема с существующими данными - половина из них на русском языке и (по крайней мере, мне кажется) в кодировке utf-8.
Когда я показываю эти данные в админке django, они не отображаются правильно.
In [52]: p.name
Out[52]: u'\xd0\u02dc\xd0\xb3\xd0\xbe\xd1\u20ac\xd1\u0152 '
In [53]: repr(p.name)
Out[53]: "u'\\xd0\\u02dc\\xd0\\xb3\\xd0\\xbe\\xd1\\u20ac\\xd1\\u0152 '"
В админке django это выглядит так:
Игорь
Кодировки все еще немного мифичны для меня, но если я правильно понимаю этот вывод, в основном это байты utf-8 в объекте Unicode.
Вопрос: возможно ли это исправить в слое базы данных django? Я собираюсь обновить существующий контент в этих таблицах, и мне нужно, чтобы существующий интерфейс PHP был совместим как с новыми данными, так и со старыми.
Когда я добавляю эти параметры базы данных, данные отображаются в админке правильно, однако, я получаю ошибку UnicodeEncode при сохранении чего-либо.
DATABASE_OPTIONS = {
'charset': 'latin1',
'use_unicode': False,
}
В этом случае возвращается имя:
In [2]: p2.name
Out[2]: '\xd0\x9b\xd0\xae\xd0\xa1\xd0\xaf'
Я проверил с помощью таблицы символов utf-8, и это правильные символы для данных, хранящихся в этой строке.