C++读取mysql中utf8mb4编码表数据乱码问题及UTF8转GBK编码
数据库编码为utf8,但是由于某些表的一些字段存储了emoji字符,表采用了utf8mb4编码,默认情况下在C++代码中读出的中文字段值都变成了乱码。
解决方法为,在进行数据库查询前,在C++中执行一下“set names utf8”,例如在我的程序里执行下面的语句即可:
//不加这句话,中文乱码 mDS->executeNonQuery("set names utf8");
读出数据后,将字符转为本地编码即可,如GB2312,下面的函数实现将utf8编码的字符转为gbk编码:
//UTF_8 转gb2312 void UTF_8ToGB2312(string &pOut, char *pText, int pLen) {char buf[4];char* rst = new char[pLen + (pLen >> 2) + 2];memset(buf,0,4);memset(rst,0,pLen + (pLen >> 2) + 2);int i =0;int j = 0;while(i < pLen){if(*(pText + i) >= 0){rst[j++] = pText[i++];}else {WCHAR Wtemp;UTF_8ToUnicode(&Wtemp,pText + i);UnicodeToGB2312(buf,Wtemp);unsigned short int tmp = 0;tmp = rst[j] = buf[0];tmp = rst[j+1] = buf[1];tmp = rst[j+2] = buf[2];//newBuf[j] = Ctemp[0];//newBuf[j + 1] = Ctemp[1]; i += 3; j += 2; }}rst[j]='\0';pOut = rst;delete []rst; }
void UnicodeToGB2312(char* pOut,WCHAR uData) {WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(WCHAR),NULL,NULL);return; }
void UTF_8ToUnicode(WCHAR* pOut,char *pText) {char* uchar = (char *)pOut;uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);return; }
读出数据后,要使用GDAL将数据写出到shp文件,同样也遇到了中文乱码问题。参照此处的文章,顺利解决,感谢原作者的分享。
转载于:https://www.cnblogs.com/yeahgis/p/5422469.html
C++读取mysql中utf8mb4编码表数据乱码问题及UTF8转GBK编码相关推荐
- Spark读取MySQL中的数据为DataFrame
Spark读取JDBC中的数据(以MySQL为例)为DataFrame,有两种方式. //聚合的时候默认分区是200,可以在此设置 val spark = SparkSession.builder() ...
- java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...
Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...
- mysql mediumblob读取_JSP如何读取MySql中MEDIUMBLOB字符串 | 学步园
JSP如何读取MySql中MEDIUMBLOB字符串,并显示? 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于 ...
- c 读取mysql中mediumblob_「mediumblob」JSP如何读取MySql中MEDIUMBLOB字符串 - seo实验室
mediumblob JSP如何读取mysql中mediumBLOB字符串,并显示? 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候, ...
- JSP如何读取MySql中MEDIUMBLOB字符串
JSP如何读取MySql中MEDIUMBLOB字符串,并显示? 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于 ...
- java mysql 中文乱码_java读取MySQL中的中文数据显示乱码
在linux平台(Ubuntu 10.10)上安装MySQL(5.1)和JDK(1.6),然后使用PuTTY远程操作.只将PuTTY的Window -> Translation 中的" ...
- Java如何给Mysql中插入year类型数据
文章目录 Java如何给Mysql中插入year类型数据 实际问题: 解决方案: 从数据库中读取year类型数据到Java 从Java中往数据库存储year数据 Java如何给Mysql中插入year ...
- python mysql批量更新_Python批量删除mysql中千万级大量数据的脚本分享
场景描述 线上mysql数据库里面有张表保存有每天的统计结果,每天有1千多万条,这是我们意想不到的,统计结果咋有这么多.运维找过来,磁盘占了200G,最后问了运营,可以只保留最近3天的,前面的数据,只 ...
- mysql重命名数据表称方式_在MySQL中,使用()重命名数据表。_学小易找答案
[单选题]( )的上海文坛被称为"张爱玲年". [多选题]下列哪些是属于共集放大电路的特点?() [阅读理解]Passage Two Thailand is to ban smok ...
最新文章
- mysql必知必会日期函数,MySQL:MySQL必知必会总结
- mysql binlog 目录_怎么查看mysql 的binlog日志存放的位置(linux和win)
- java ndc_通过slf4j/log4j的MDC/NDC 实现日志追踪
- MapReduce-多个Mapper
- mysql empty table_【MySQL】 empty table and delete table.
- 大佬就是有想法!比尔盖茨办公室曝光:实体版元素周期表震撼!
- LeetCode—数据库简单题(三)
- Ubuntu系统下go语言环境的搭建
- 12.go 源码文件
- 详细 C语言自增自减运算符区分 ++n和n++
- 程序员的人生——应届生北漂的第三天
- php 正则格式化图片,php利用正则表达式格式化电话号码的方法
- 拯救剧荒!程序员最爱的美剧TOP5!
- Prim算法(JAVA实现-邻接矩阵)
- jsp java 上传图片_如何在Jsp上传图片
- 【物理应用】大气湍流相位屏仿真matlab源码
- 递归组件(简单介绍)
- 淘宝TOP程序API接口接入教程--入门篇
- 转 RC523读TypeB卡-----读B卡的天线调制过程
- 零基础学习韩语的五大学习方式助你…
热门文章
- python常用内置模块-python常用的内置模块
- python序列类型-Python之序列类型方法
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
- 学python就业要看哪些书-学习Python适合就业哪些岗位?老男孩Python学习
- python用于什么-python用于什么
- python自学路线-Python最佳学习路线
- python写程序求1-3+5-7+...-99+101的值-python基本练习
- python爬虫技术可以干什么-Python除了爬虫,还能干啥?
- c语言程序大型案例分析,C语言程序设计习题解析与应用案例分析(第2版)
- spring jdbc设计与实现