У меня есть приложение Django, которое берет данные твита из API Twitter и сохраняет его в базе данных MySQL. Насколько я знаю (я все еще обдумываю тонкости кодировки символов), я использую UTF-8 везде, включая кодировку и сопоставление MySQL, которая отлично работает, за исключением случаев, когда твит содержит Emojiсильные > символы, которые, как я понимаю, используют четырехбайтную кодировку. Пытаясь спасти их, вы получаете следующие предупреждения от Django:
/home/biggleszx/.virtualenvs/myvirtualenv/lib/python2.6/site-packages/django/db/backends/mysql/base.py:86: Предупреждение: неправильное строковое значение: '\ xF0\x9F\x98\xAD I... 'для столбца' text 'в строке 1 return self.cursor.execute(query, args)
Я использую MySQL 5.1, поэтому использование utf8mb4 не является вариантом, если я не обновляюсь до 5.5, скорее, не только (также из того, что я прочитал, поддержка Django для этого не совсем готовая к производству, хотя это может быть не более точной). Я также видел людей, которые советуют использовать BLOB вместо TEXT на затронутых столбцах, что я бы тоже не сделал, поскольку я полагаю, что это повредит производительности.
Итак, вопрос в том, что я не слишком беспокоюсь о сохранении содержимого твитов на 100%, есть ли способ отфильтровать все символы Emoji и заменить их на не-многобайтовый символ, например, почтенный WHITE MEDIUM SMALL SQUARE (U+25FD)
? Я считаю, что это самый простой способ сохранить эти данные, учитывая текущую настройку, хотя, если мне не хватает другого очевидного решения, я бы хотел его услышать!
FYI, я использую запас Python 2.6.5 на Ubuntu 10.04.4 LTS. sys.maxunicode
- 1114111, поэтому это сборка UCS-4.
Спасибо за чтение.