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表示右大括号}

posted @ 2018-11-14 14:39  逆向人  阅读(393)  评论(0)    收藏  举报