我有一个 Django 应用程序,它从 Twitter 的 API 获取推文数据并将其保存在 MySQL 数据库中。据我所知(我仍然对字符编码的细节有所了解)我在所有地方都使用 UTF-8,包括 MySQL 编码和整理,除非推文包含表情符号字符,否则它工作正常,我理解使用四字节编码。尝试保存它们会从 Django 产生以下警告:
/home/biggleszx/.virtualenvs/myvirtualenv/lib/python2.6/site-packages/django/db/backends/mysql/base.py:86:警告:不正确的字符串值:'\xF0\x9F\x98\xAD I ...' 对于第 1 行的列 'text' 返回 self.cursor.execute(query, args)
我正在使用 MySQL 5.1,因此除非我升级到 5.5,否则我不希望使用utf8mb4(也从我读过的内容来看,Django 对此的支持还没有完全准备好生产,尽管这可能不再准确)。我还看到有人建议在受影响的列上使用 BLOB 而不是 TEXT,我也不想这样做,因为我认为这会损害性能。
那么,我的问题是,假设我不太担心 100% 保留推文内容,有没有办法可以过滤掉所有表情符号字符并用非多字节字符替换它们,例如 venerable WHITE MEDIUM SMALL SQUARE (U+25FD)
?我认为这是根据我当前的设置保存数据的最简单方法,但如果我缺少另一个明显的解决方案,我很想听听!
仅供参考,我在 Ubuntu 10.04.4 LTS 上使用现有的 Python 2.6.5。sys.maxunicode
是 1114111,所以它是 UCS-4 版本。
谢谢阅读。