解决MFC的CString类型数据存储到Mysql的冷僻汉字乱码

本文介绍了一种解决MySQL数据库中冷僻字存储的方法,通过将冷僻字转换为16进制Unicode编码进行存储,再从数据库读取时转换回汉字,有效解决了特殊字符的存储难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“䶮”字,存入mysql后,是?号。跟踪后发现,在调用mysql_real_query函数之前,CString转为char*的时候就已经是?号了。怎么办?

网上找了一圈,没解决。于是自己就想个笨方法:

(存库的时候)1.先将“䶮”字转为16进制的unicode编码 2.将unicode编码转字符串存入mysql 

(读库的时候)1.先将char*转16进制的unicode编码 2.将16进制的转汉字

代码如下:

引入头文件:

#include "string"
#include <inttypes.h>

     存: 

   //将姓名转为unicode码存入数据库,避免有些冷僻字无法存储
    CString unicode;
    UINT16 n;
    for (size_t i = 0; i < name.GetLength(); i++)//假设name里面存入的是“李䶮䶮”
    {
        n = name.GetAt(i);
        unicode.Format(_T("%s0x%0x"), unicode, n);
    }

取:

while (row = mysql_fetch_row(mysql_res))
    {
        for (size_t i = 0; i < col; i++)
        {
            CString value(row[i]); 
            //如果是姓名列,那么就由16进制Unicode码转回汉字
            if (是名字这一列)
            {
                CString name;
                for (size_t j = 0; j < strlen(row[i]); j += 6)
                {
                    char code[7];
                    memcpy_s(code, 7, &row[i][j], 6);  //截取一个汉字的unicode
                    code[6] = '\0';
                    uint16_t ucode;
                    sscanf_s(code, "%" SCNx16, &ucode);//由字符串形式的unicode转为16进制
                    name.Format(_T("%s%c"), name, ucode);//将16进制unicode码转为汉字
                } 
            }
            else
            {
                //不是名字这一列,在此处理
            }
        }

    }

/****************************************************************************

这个方法虽然low,但是也算解决了我的问题,目前能凑合着用。期待各位大神万忙之中给个完美的解决方案,不胜感激。

******************************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值