如何在Python中编码(utf8mb4)

use*_*236 8 python mysql encoding utf-8

如何在Python中用ut8mb4编码?

我有两组数据:数据我将从Parse迁移到我的新MySQL数据库,而数据将继续(仅与我的新数据库对话).我的数据库是utf8mb4,以存储表情符号和重音字母.

当我在python脚本中时,第一组数据只显示正确(当涉及表情符号和重音符号时):

MySQLdb.escape_string(unicode(xstr(data.get('message'))).encode('utf-8')) 
Run Code Online (Sandbox Code Playgroud)

当从PHP中读取MySQL数据库时:

$row["message"] = utf8_encode($row["message"]);
Run Code Online (Sandbox Code Playgroud)

当我不包括该utf8_encode($row["message"])部分时,第二组数据仅正确显示(当涉及表情符号和重音时).我正在尝试协调这些,以便将两组数据正确地返回到我的iOS应用程序.请帮忙!

Tom*_*yen 24

为了表情符号和超出U + FFFF代码点的其他字符,我在Python和MySQL之间正确交换了全系列的UTF-8字符,我一直在努力.

为了确保一切正常,我必须做以下事情:

  1. 确保utf8mb4用于CHAR,VARCHAR以及TEXT在MySQL列
  2. 在Python中强制执行UTF-8
  3. 强制在Python和MySQL之间使用UTF-8

要在Python中强制执行UTF-8,请将以下行添加为Python脚本的第一行或第二行:

# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

要在Python和MySQL之间强制执行UTF-8,请按如下方式设置MySQL连接:

# Connect to mysql.
dbc = MySQLdb.connect(host='###', user='###', passwd='###', db='###', use_unicode=True)

# Create a cursor.
cursor = dbc.cursor()

# Enforce UTF-8 for the connection.
cursor.execute('SET NAMES utf8mb4')
cursor.execute("SET CHARACTER SET utf8mb4")
cursor.execute("SET character_set_connection=utf8mb4")

# Do database stuff.

# Commit data.
dbc.commit()

# Close cursor and connection.
cursor.close()
dbc.close()
Run Code Online (Sandbox Code Playgroud)

这样,您就不需要使用诸如encode和之类的函数utf8_encode.

  • 非常有用的清单.从蒸汽中解救出来. (2认同)

Mar*_*ers 17

MySQL的utf8mb4编码只是标准的UTF-8 .

他们必须添加该名称,以区别于仅支持BMP字符的损坏的 UTF-8字符集.

换句话说,在与MySQL交谈时应始终编码为UTF-8,但要考虑到数据库可能无法处理超出U + FFFF的Unicode代码点,除非您utf8mb4 在MySQL端使用.

一般来说,您希望避免手动编码和解码.配置连接和排序规则以便为您处理Unicode.因为MySQLdb,这意味着设置charset='utf8'(设置use_unicode=True处理SET NAMESSET character_set_connection),然后将Python端的所有文本作为Unicode文本处理.