emoji mysql 转 unicode_unicode和emoji编码
研究Hprose的windows编译时,发现它使用了emoji编码。emoji需要utf-32的字符才能存下。(此句不准确,应该是至少4个字节才能存放)。所以有说法用mysql存emoji时,需要使用utf8-mb4。
比如:??
首先来个简单的测试程序:
g++-6 -std=c++11 encoding.cpp -o encoding
#include #include #include
using namespace std;
int main()
{
printf("sizeof(wchar_t)=%zu\n", sizeof(wchar_t));
printf("sizeof(char16_t)=%zu\n", sizeof(char16_t));
printf("sizeof(char32_t)=%zu\n", sizeof(char32_t));
const char native[] = "??";
printf("native:");
for (unsigned i = 0; i < strlen(native); i++)
{
printf("%02x ", (unsigned char)native[i]);
}
printf("\n");
wchar_t wchar[] = L"??";
printf("wchar:");
for (auto item : wchar)
{
printf("%x ", item);
}
printf("\n");
wstring wstr = L"??";
printf("wstr:");
for (auto item : wstr)
{
printf("%x ", item);
}
printf("\n");
u16string u16str = u"??";
printf("u16:");
for (auto item : u16str)
{
printf("%x ", item);
}
printf("\n");
u32string u32str = U"??";
printf("u32:");
for (auto item : u32str)
{
printf("%x ", item);
}
printf("\n");
return 0;
}
Linux上输出:
sizeof(wchar_t)=4
sizeof(char16_t)=2
sizeof(char32_t)=4
native:f0 9f 87 a8 f0 9f 87 b3
wchar:1f1e8 1f1f3 0
wstr:1f1e8 1f1f3
u16:d83c dde8 d83c ddf3
u32:1f1e8 1f1f3
(1)其对应的utf32(u32string)为:1f1e8 1f1f3
(2)其对应的utf8(string)为:f0 9f 87 a8, f0 9f 87 b3
-> 11110[000] 10[0011111] 10[000111] 10[101000],即000001 11110001 11101000=0x1f1e8
和 11110[000] 10[0011111] 10[000111] 10[110011],即000001 11110001 11110011=0x1f1f3
和utf32匹配了。
(3)其对应的utf16(u16string)为:d83c dde8 d83c ddf3
-> 1101 10[00 0011 1100], 1101 11[01 1110 1000],即000[0+1] 11110001 11101000=0x1f1e8
和 1101 10[00 0011 1100], 1101 11[01 1111 0011],即000[0+1] 11110001 11110011=0x1f1f3
和utf32也是匹配的。注意计算中要加1。
(4)其对应的Windows的wstring是d83c dde8 d83c ddf3。
转码得到的是:ED A0 BC, ED B7 A8, ED A0 BC, ED B7 B3
ED A0 BC 1110 [1101] 10[10 0000] 10[11 1100] 即 1101 1000 0011 1100 -> D8 3C
ED B7 A8 1110 [1101] 10[11 0111] 10[10 1000] 即 1101 1101 1110 1000 -> DD E8
ED A0 BC 1110 [1101] 10[10 0000] 10[11 1100] 即 1101 1000 0011 1100 -> D8 3C
ED B7 B3 1110 [1101] 10[11 0111] 10[11 0011] 即 1101 1101 1111 0011 -> DD F3
参考
Facet 说明
std::codecvt_utf8 封装了UTF-8与UCS2及UTF-8与UCS4的编码转换
std::codecvt_utf16 封装了UTF-16与UCS2及UTF-16与UCS4的编码转换
std::codecvt_utf8_utf16 封装了UTF-8与UTF-16的编码转换
说明hprose使用
std::wstring_convert<:codecvt_utf8>> conv;
writeString(conv.to_bytes(str));
对于windows产生的是UCS2->UTF8,对于linux/mac产生的是UTF32->UTF8。
std::wstring_convert<:codecvt_utf8_utf16>, wchar_t> conv;
writeString(conv.to_bytes(str));
产生的是UTF16->UTF8。
emoji mysql 转 unicode_unicode和emoji编码相关推荐
- emoji mysql 配置_MySql支持Emoji表情
1.原因: UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 2.解决方案: 将Mysql的编码从utf8转换成utf8 ...
- mysql图标_MySQL 支持 emoji 图标存储
在MySLQ中 UPDATA 和 INSERT 数据的时候,如果数据上面带有emoji图标,例如:?.?.? 很容易更新或者插入不成功,导致报错. 都快崩溃了,但是还好终于解决了这种鬼问题.资料显示原 ...
- 综合网上解决mysql 5.7保存emoji 失败问题
开发项目时遇到用mysql 5.7 保存emoji 失败,在百度上看了很多的解决办法,终于解决了,综合一下所有的解决办法. 1 将Mysql的编码从utf8转换成utf8mb4. 2 my.cnf 文 ...
- mysql存储图片node_Node.js教程 阿里云mysql如何支持存储emoji表情
本篇教程介绍了Node.js教程 阿里云mysql如何支持存储emoji表情,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入. < 本篇主要记录nodejs项目阿里云m ...
- emoji mysql存储
执行插入前执行:SET NAMES utf8mb4; 如: SET NAMES utf8mb4; INSERT test(Content) VALUES('-'); PHP例子: $paramValu ...
- mysql存json将utf8编码 去掉,MySQL对JSON类型UTF-8编码导致中文乱码探讨
原文:https://www.cnblogs.com/CreateMyself/p/12587426.html 前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有 ...
- MySQL对JSON类型UTF-8编码导致中文乱码探讨
继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中文出现 ...
- php 微信emoji输出,页面如何输出Emoji表情字符
Emoji表情符号广泛运用于各种的社交软件上,是非常受欢迎的一种字符,如果用语言文字无法表达你内心的冲动,发一个Emoji表情就好了. 对于web而言如何在页面保存和展现这些字符呢?这可不是件容易的事 ...
- oracle存储emoji表情,Android自带emoji表情的使用方法详解
什么是emoji表情 emoji表情是一种表情符号,在代码中它现在其实是一组遵循Unicode的编码,即每一个表情符号都对应了一个Unicode编码.更进一步说,emoji表情实际上是一组Unicod ...
最新文章
- 土壤生物多样性与生物化学过程研讨会(6.20-23合肥)
- 专访SIGDIAL2020最佳论文一作高信龙一:成功都是一步步走出来的
- 【内推】腾讯优图(深圳)实验室招计算机视觉算法实习生
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
- 执行transact mysql_创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL
- Valgrind使用说明
- linux shell 等待输入_linux运维——基础篇
- GrideView属性的学习
- Sublime Text快捷键去除空白行
- 围棋提子后的子放哪_围棋入门知识点:围棋规则 —— 禁入点
- SVN客户端——SmartSVN功能详解
- mysql front的使用注意要点
- 鱼塘钓鱼(fishing)
- 万维钢:怎样做读书笔记
- 美团因拖欠骑手工资被约谈;传苹果6月6日举办全球开发者大会;Linux 5.18开始启动停止支持ReiserFS|极客头条
- 液晶显示器图像颜色发黄,菜单颜色正常
- JavaWeb网上订餐管理系统|餐饮就餐订餐餐厅(含源码+论文+答辩PPT等)
- GPS卫星同步时钟,GPS卫星时钟,GPS时钟
- 一只蝴蝶挥了挥翅膀,于是有了AI读心术
- UEFI安装win7过程的另类引导系统
热门文章
- 有了ROS这架车,SLAM之路不再遥远!
- RandomRooms:用于3D目标检测的无监督预训练方法(ICCV2021)
- 3D视觉工坊中秋国庆贺礼!
- java与fabric区块链--fabric-ca-server 注册---(3)
- CentOS7(64位)安装Jupyter Notebook
- Android Binder IPC机制
- yii2 导入开源php项目_终于来了,yii2和phpstorm的完美整合,支持到你不要不要的。...
- 广东海洋大学计算机科学与技术排名,最新排名!广东高校22个学科位居全球前50位...
- 静态配置_【实验】华为静态路由基础配置
- python异常处理语句编程题_一篇文章让你掌握Python异常处理所有知识点,记得收藏...