如何在Python中的ut8mb4中编码内容?
我有两组数据:正在从Parse迁移到新的MySQL数据库的数据,以及向前传输的数据(仅与新数据库通信)。我的数据库是utf8mb4,用于存储表情符号和带重音的字母。
当我使用python脚本时,第一组数据仅能正确显示(涉及表情符号和重音符号时):
MySQLdb.escape_string(unicode(xstr(data.get('message'))).encode('utf-8'))
并且在PHP中从MySQL数据库读取时:
$row["message"] = utf8_encode($row["message"]);
当我不包含第二部分数据时,仅能正确显示第二组数据(涉及表情符号和重音时)utf8_encode($row["message"])。我正在尝试协调这些数据,以便将两组数据都正确返回给我的iOS应用。请帮忙!
utf8_encode($row["message"])
MySQL的utf8mb4编码是 只是标准的UTF-8 。
utf8mb4
但是,他们必须添加该名称,以使其与仅支持BMP字符的 损坏的 UTF-8字符集区分开。
换句话说,在Python端,与MySQL对话时,应始终编码为UTF-8,但要考虑到,除非utf8mb4 在MySQL端 使用,否则数据库可能无法处理U + FFFF以外的Unicode代码点。
但是,一般而言,您要避免 手动 编码和解码,而不必为此MySQLdb担心。为此,您可以配置连接和排序规则以透明地处理Unicode文本。对于MySQLdb,这意味着设置charset='utf8mb4':
MySQLdb
charset='utf8mb4'
database = MySQLdb.connect( host=hostname, user=username, passwd=password, db=databasename, charset="utf8mb4" )
然后使用普通的Python 3 str字符串;将use_unicode选项设置为默认True*。
str
use_unicode
True
注意:这可以 为您 处理SET NAMES和SET character_set_connection),因此无需手动发布。 __
SET NAMES
SET character_set_connection
*除非您仍然使用Python 2,否则默认值为False。将其设置为True并使用u'...'unicode字符串。
False
u'...'