1、UTF8与GB2312之间的转换UTF8与GB2312之间的转换 相信一定有不少的程序开发人员时常会遇到字符编码的问题,而这个问题也是非常让人头痛的。因为这些都是潜在的错误,要找出这些错误也得要有这方面的开发经验才行。特别是在处理xml文档时,该问题的出现就更加的频繁了,有一次用java写服务器端程序,用vc写客户端与之交互。交互的协议都是用xml写的。结果在通讯时老是发现数据接受不正确。纳闷!于是用抓取网络数据包工具抓取数据,后来才发现原来是java上xml的头是这样的,而vc上默认的是GB2312。所以一遇到汉字数据就不正确了。去网上找资料,这方面的文章好象特别少,针对像这样的问题,下面我
2、介绍一下我自己写的一个转换程序。当然,程序很简单。如果有画蛇添足的地方,还望各位高手一笑了之。如果您对UTF-8、Unicode、GB2312等还是很陌生的话,请查看int WideCharToMultiByte( UINT CodePage, / code page DWORD dwFlags, / performance and mapping flags LPCWSTR lpWideCharStr, / wide-character string int cchWideChar, / number of chars in string LPSTR lpMultiByteStr, / bu
3、ffer for new string int cbMultiByte, / size of buffer LPCSTR lpDefaultChar, / default for unmappable chars LPBOOL lpUsedDefaultChar / set when default char used); /将宽字符转换成多个窄字符int MultiByteToWideChar( UINT CodePage, / code page DWORD dwFlags, / character-type options LPCSTR lpMultiByteStr, / string
4、to map int cbMultiByte, / number of bytes in string LPWSTR lpWideCharStr, / wide-character buffer int cchWideChar / size of buffer);/将多个窄字符转换成宽字符 需要用到的一些函数:CString CXmlProcess:HexToBin(CString string)/将16进制数转换成2进制 if( string = 0) return 0000; if( string = 1) return 0001; if( string = 2) return 0010;
5、 if( string = 3) return 0011; if( string = 4) return 0100; if( string = 5) return 0101; if( string = 6) return 0110; if( string = 7) return 0111; if( string = 8) return 1000; if( string = 9) return 1001; if( string = a) return 1010; if( string = b) return 1011; if( string = c) return 1100; if( strin
6、g = d) return 1101; if( string = e) return 1110; if( string = f) return 1111; return ;CString CXmlProcess:BinToHex(CString BinString)/将2进制数转换成16进制 if( BinString = 0000) return 0; if( BinString = 0001) return 1; if( BinString = 0010) return 2; if( BinString = 0011) return 3; if( BinString = 0100) ret
7、urn 4; if( BinString = 0101) return 5; if( BinString = 0110) return 6; if( BinString = 0111) return 7; if( BinString = 1000) return 8; if( BinString = 1001) return 9; if( BinString = 1010) return a; if( BinString = 1011) return b; if( BinString = 1100) return c; if( BinString = 1101) return d; if( B
8、inString = 1110) return e; if( BinString = 1111) return f; return ;int CXmlProcess:BinToInt(CString string)/2进制字符数据转换成10进制整型 int len =0; int tempInt = 0; int strInt = 0; for(int i =0 ;i string.GetLength() ;i +) tempInt = 1; strInt = (int)string.GetAt(i)-48; for(int k =0 ;k Gb2312ToUnicode(xmlStream+
9、oldCharLen); buffer = this-UnicodeToUTF_8(pbuffer); *(newCharBuffer+newCharLen) = *buffer; *(newCharBuffer +newCharLen +1) = *(buffer + 1); *(newCharBuffer +newCharLen +2) = *(buffer + 2); newCharLen += 3; oldCharLen += 2; newCharBuffernewCharLen = 0; CString string1 ; string1.Format(%s,newCharBuffer); finalCharBuffer = new charnewCharLen+1; memcpy(finalCharBuffer,newCharBuffer,newCharLen+1); return finalCharBuffer;程序都非常的简单,由于实在太穷。已经吃了两天的方便面。所以现在头昏,程序的详细说明就不写了。程序员到了像我这样的地步也真是少见。工资低没有办法。哎!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1