您的位置:首页 > 其它

windows下对于GBK到UTF8编码的相互转换

2017-03-13 16:31 381 查看
由于最近在了解socket,就在windows和linux下尝试发送socket,结果发现linux下的服务端和windows下的客户端收到消息内容不一致.最后发现是编码不一致导致的问题.以前用qt写程序时并没有注重转换过程,所以纯c++编程时毫无办法,就去研究了下qt的源码和相关网上文献,结合之后,发现转换格式步骤如下

GBK->UTF-8:

GBK->unicode->UTF-8;

UTF-8->GBK:

UTF-8->unicode->GBK;

也就是说,无论是gbk转换到utf-8还是utf-8转换到gbk,都需要先转换成unicode.

代码如下

//需要包含windows.h等头文件

string GBK_2_UTF8(string gbkStr)

{
string outUtf8 = "";
int n = MultiByteToWideChar(CP_ACP, 0, gbkStr.c_str(), -1, NULL, 0);
WCHAR *str1 = new WCHAR
;
MultiByteToWideChar(CP_ACP, 0, gbkStr.c_str(), -1,str1, n);
n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
char *str2 = new char
;
WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
outUtf8 = str2;
delete[]str1;
str1 = NULL;
delete[]str2;
str2 = NULL;
return outUtf8;

}

string UTF8_2_GBK(string utf8Str)

{
string outGBK = "";
int n = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, NULL, 0);
WCHAR *str1 = new WCHAR
;
MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, str1, n);
n = WideCharToMultiByte(CP_ACP, 0, str1, -1, NULL, 0, NULL, NULL);
char *str2 = new char
;
WideCharToMultiByte(CP_ACP, 0, str1, -1, str2, n, NULL, NULL);
outGBK = str2;
delete[] str1;
str1 = NULL;
delete[] str2;
str2 = NULL;
return outGBK;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: