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;
}
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;
}
相关文章推荐
- Java实现的utf8,gbk,unicode编码相互转换的代码
- Java实现的utf8,gbk,unicode编码相互转换的代码
- Java实现的utf8,gbk,unicode编码相互转换的代码
- GBK与UTF8编码相互转换
- qt 下 utf8编码与gbk编码的相互转换(附实例)
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- 黑马程序员-Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- UTF8与GBK字符编码之间的相互转换
- Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- 将windows下编辑好的文件(GBK)转换成Linux下的格式(UTF8)
- WindowsPhone的中文GB2312、GBK编码与Unicode相互转换
- GB2312编码与UTF-8编码的相互转换代码(linux windows下通用)
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- C/C++ 各种字符编码字符串的转换 可用于XML文件的字符转化读写 (收集 GBK - UTF8 - Unicode - ANSI )
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- 用 java 将文件的编码从GBK 转换成 UTF8收藏
- Linux下汉字编码的转换(gbk转换为utf8)
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换