utf-8转gb2312
近日在对一个json串进行转码时,显示中文乱码,原因是json串编码方式为utf-8,而我程序在windows上采用的是多字节编码方式,即采用gb2312编码。这里就存在一个utf-8到gb2312的转换,转换代码如下:
1 #include "stdafx.h" 2 #include "windows.h" 3 //UTF-8到GB2312的转换 4 char* U2G(const char* utf8) 5 { 6 int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); 7 wchar_t* wstr = new wchar_t[len + 1]; 8 memset(wstr, 0, len + 1); 9 MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); 10 len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0,NULL,NULL,); 11 12 char* str = new char[len + 1]; 13 memset(str, 0, len + 1); 14 WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL); 15 16 if (wstr) delete[] wstr; 17 return str; 18 } 19 20 int _tmain(int argc, _TCHAR* argv[]) 21 { 22 const char us[29] = { 0xE9, 0x9D, 0x9E, 0xE6, 0xB3, 0x95, 23 0xE8, 0xBF, 0x9B, 0xE5, 0x85, 0xA5, 24 0xE5, 0x91, 0x8A, 0xE8, 0xAD, 0xA6, 25 0x22,0x0D,0x0A,0x7D,0x0D,0x0A, 26 0x7D,0x0D,0x0A,0x7D }; 27 char* gs = U2G(us); 28 printf("\nraw data is:%s\n", gs);
29 system("pause"); 30 return 0; 31 }
输出结果:

这里数组存的是原始的十六进制数据,与wireshark抓包在data一栏的显示类似,其中0x7D表示右大括号}
|
作者:逆向人 公众号:逆向人 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |

浙公网安备 33010602011771号