惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
月光博客
月光博客
博客园_首页
博客园 - 叶小钗
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
量子位
小众软件
小众软件
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
IT之家
IT之家
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - yeahgis

更新Win11后,不显示图片缩略图 在Ubuntu 20.04.1 LST上安装摩尔线程MTT S80驱动 Win10文件资源管理器无法找到“始终显示图标,不显示缩略图”的解决办法 解决arcmap10.2无法连接arcgis server管理的问题 终于解决了AMD RYZEN 3970X的散热问题 免费访问Web of Science并检索WOS入藏号的方法 纪念一下 ASP.NET LinqDataSource数据绑定后,遇到[MissingMethodException: 没有为该对象定义无参数的构造函数。]问题。 error 2593 operator << 不明确的可能的解决方法 arcgis flexviewer中由Application向widget传值 Flash Builder中“Error: #2036 加载未完成”错误的解决方法 ArcGIS Server API for JavaScript调用错误:已阻止跨源请求:同源策略禁止读取位于...... Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM GPS accuracy in Android 解决Win7旗舰版开机后无线网络识别非常慢的问题 Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题 Android学习笔记----Activity的生命周期图示 Android学习笔记----TimerTask中显示Toast的问题 Android学习笔记----天地图API开发之UnsatisfiedLinkError
C++读取mysql中utf8mb4编码表数据乱码问题及UTF8转GBK编码
yeahgis · 2016-04-22 · via 博客园 - yeahgis

数据库编码为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文件,同样也遇到了中文乱码问题。参照此处的文章,顺利解决,感谢原作者的分享。