UTF8和GBK的转换不成功

jhldelphi 2016-02-03 03:18:13
如:[罗志祥 小丑鱼] toUTF8 [缃楀織绁?灏忎笐楸糫
[缃楀織绁?灏忎笐楸糫 toGBK [罗志??小丑鱼]

1、变成UTF8之后,转换不回来了,空格变成了问号
2、下面是转换代码

//UTF8 TO GBK
CString UTF8ToGBK(CString str)
{
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)str, -1, NULL,0);
WCHAR * wszGBK = new WCHAR[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)str, -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);

CString strResult = szGBK;
delete[] szGBK;
delete[] wszGBK;

return strResult;
}

//GBK TO UTF8
CString GBKToUTF8(CString str)
{
int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)str, -1, NULL,0);
WCHAR * wszUtf8 = new WCHAR[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)str, -1, wszUtf8, len);

len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);

CString strResult = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;
return strResult;
}
...全文
243 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdghchj 2016-02-03
  • 打赏
  • 举报
回复
测试没问题啊
现在ing 2016-02-03
  • 打赏
  • 举报
回复
jhldelphi 2016-02-03
  • 打赏
  • 举报
回复
解决了,要分的来
memset(wszUtf8, 0, len * 2 + 2); 导致[罗志祥 小丑鱼] 转换有误

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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