utf8转gb2312的问题

liwei84516 2009-11-25 11:00:08
如题
std::string s_result;
CA2W szUnicode(m_strMessage.GetBuffer(),CP_UTF8);
s_result = unicode_2_ansi(szUnicode);

m_strMessage是从mysql中读取出来的CString类型的值。mysql中设置的编码格式是utf8。我想把utf8格式转成gb2312格式的,然后做相应的操作

debug的时候m_strMessage的值是两个问号(实际上的值是"中文")。然后处理后的结果s_result还是两个问号。而不是"中文"。请问我是什么地方出错了?


非常急,谢谢.............................
...全文
187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2009-11-25
  • 打赏
  • 举报
回复
俺没用过A2W之类的宏,俺都是先转成utf16,再转成ansi,如果在中文环境下,codepage给0就0,非中文环境,给codepage 936。
gaspoll 2009-11-25
  • 打赏
  • 举报
回复
你首先应该确认从数据库中取得的数据是正确的。设个断点,把m_strMessage的内存地址找到看看,是否是UTF8的中文编码。
tanwei1002 2009-11-25
  • 打赏
  • 举报
回复
下面这函数能将UTF8转化为GB2312

int UTF8ToGB(const char* str,char *out)
{
WCHAR *strSrc;
TCHAR *szRes;
int len;

//»ñµÃÁÙʱ±äÁ¿µÄ´óС
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i+1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);

//»ñµÃÁÙʱ±äÁ¿µÄ´óС
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new TCHAR[i+1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

len = (i+1)*sizeof(CHAR);
memcpy(out,szRes,len);
out[len+1] ='\0';

delete []strSrc;
delete []szRes;

return len;
}
hzy694358 2009-11-25
  • 打赏
  • 举报
回复
俺也没用过,
是不是CA2W szUnicode(m_strMessage.GetBuffer(),CP_UTF8); 这个函数参数设置有问题,
实在不行,用这个:
/*
*Utf8格式转GBK格式*
*@param strGBK: 待转换的Utf8 CString
*转换完成后,为GBK CString
*/
void XmlDeal::ConvertUtf8ToGBK(CString& strUtf8)
{
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
unsigned short * wszGBK = new unsigned short[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, wszGBK, len);

len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, wszGBK, -1, szGBK, len, NULL,NULL);

strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧