问题的本质:
Qt 解析包含表情符号字符的文件。
之后,数据以 varchar 类型的属性写入 MySql 类型的表 - InnoDB。将 Emoji 的一部分添加到表格后(以及调试时在 Qt 本身中),例如: https ://emojipedia.org/drop-of-blood/
- 不显示
已经做了什么:
- 创建一个指定属性编码的表:
CREATE TABLE IF NOT EXISTS `"+tableName+
"`(filed1 int not null AUTO_INCREMENT, filed2 varchar(30),
filed3 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
filed4 varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
filed5 varchar(100),PRIMARY KEY(filed1),INDEX USING BTREE(filed1)"");
- 设置数据库的编码:
ALTER DATABASE <имя моей базы> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
在 Qt 中设置编码:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
有人告诉我:
mysql客户端,顺便也必须使用utf8mb4编码,否则来回转码时emoji也会丢失
因此,我有两个问题:
从这个线程的帖子来看https://stackoverflow.com/questions/25727970/pasting-emoji-in-qt-qtextedit/25732050#25732050并根据调试器 - qt 将表情符号捕获为转义序列 55358、56759,但很简单不显示(我实际上在编辑器中不需要这个),但是如果字符存在于行中,为什么它们仍然错误地写入表格?
https://bugreports.qt.io/browse/QTBUG-60039?focusedCommentId=358330&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-358330 - 如您所知 utf8mb4 是 MySQL 定义而不是一个真正的编解码器。
- 那么mysql客户端如何使用呢?
另外,我看到连接数据库后需要执行第一个请求的选项:
SET NAMES ("имя кодировки")
问题的简要总结:
与 MySql 客户端一样,如何使用 Qt 在写入表时实现对 Emoji 字符的完全支持?
无法完全支持字符,所以我不得不从字符串中删除部分表情符号。关于删除的线程在这里:
从Qt中的字符串中删除表情符号?
短的: