“䶮”字,存入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,但是也算解决了我的问题,目前能凑合着用。期待各位大神万忙之中给个完美的解决方案,不胜感激。
******************************************************************************/