c++字符集之间转换(UTF

您所在的位置:网站首页 url字符集 c++字符集之间转换(UTF

c++字符集之间转换(UTF

#c++字符集之间转换(UTF| 来源: 网络整理| 查看: 265

class CChineseCode {public :

static void UTF_8ToUnicode ( wchar_t* pOut , char * pText ) ; // 把UTF-8转换成Unicode static void UnicodeToUTF_8 ( char * pOut , wchar_t* pText ) ; //Unicode 转换成UTF-8 static void UnicodeToGB2312 ( char * pOut , wchar_t uData ) ; // 把Unicode 转换成 GB2312 static void Gb2312ToUnicode ( wchar_t* pOut , char * gbBuffer ) ; // GB2312 转换成 Unicode static void GB2312ToUTF_8 ( string & pOut , char * pText , int pLen ) ; //GB2312 转为 UTF-8 static void UTF_8ToGB2312 ( string & pOut , char * pText , int pLen ) ; //UTF-8 转为 GB2312} ;

//类实现void CChineseCode :: UTF_8ToUnicode ( wchar_t* pOut , char * pText ) { char * uchar = ( char * ) pOut ; uchar [ 1 ] = ( ( pText [ 0 ] & 0x0F ) > 2 ) & 0x0F ) ; uchar [ 0 ] = ( ( pText [ 1 ] & 0x03 ) > 4 ) ) ; pOut [ 1 ] = ( 0x80 | ( ( pchar [ 1 ] & 0x0F ) > 6 ) ; pOut [ 2 ] = ( 0x80 | ( pchar [ 0 ] & 0x3F ) ) ; return ;}

void CChineseCode :: UnicodeToGB2312 ( char * pOut , wchar_t uData ) { WideCharToMultiByte ( CP_ACP , NULL , & uData , 1 , pOut , sizeof ( wchar_t ) , NULL , NULL ) ; return ;}

void CChineseCode :: Gb2312ToUnicode ( wchar_t* pOut , char * gbBuffer ) { :: MultiByteToWideChar ( CP_ACP , MB_PRECOMPOSED , gbBuffer , 2 , pOut , 1 ) ; return ;}

void CChineseCode :: GB2312ToUTF_8 ( string & pOut , char * pText , int pLen ) { char buf [ 4 ] ; int nLength = pLen* 3 ; char * rst = new char [ nLength ] ;

memset ( buf , 0 , 4 ) ; memset ( rst , 0 , nLength ) ;

int i = 0 ; int j = 0 ; while ( i < pLen ) { //如果是英文直接复制就能 if ( * ( pText + i ) >= 0 ) { rst [ j ++ ] = pText [ i ++ ] ; } else { wchar_t pbuffer ; Gb2312ToUnicode ( & pbuffer , pText + i ) ; UnicodeToUTF_8 ( buf , & pbuffer ) ; unsigned short int tmp = 0 ; tmp = rst [ j ] = buf [ 0 ] ; tmp = rst [ j + 1 ] = buf [ 1 ] ; tmp = rst [ j + 2 ] = buf [ 2 ] ; j += 3 ;

i += 2 ;

}

}

rst [ j ] = ’’ ; //返回结果 pOut = rst ; delete [ ] rst ; return ;}

void CChineseCode :: UTF_8ToGB2312 ( string & pOut , char * pText , int pLen ) { char * newBuf = new char [ pLen ] ; char Ctemp [ 4 ] ; memset ( Ctemp , 0 , 4 ) ; int i = 0 ; int j = 0 ;

while ( i < pLen ) {

if ( pText > 0 ) { newBuf [ j ++ ] = pText [ i ++ ] ; } else { WCHAR Wtemp ; UTF_8ToUnicode ( & Wtemp , pText + i ) ; UnicodeToGB2312 ( Ctemp , Wtemp ) ; newBuf [ j ] = Ctemp [ 0 ] ; newBuf [ j + 1 ] = Ctemp [ 1 ] ;

i += 3 ; j += 2 ; } }

newBuf [ j ] = ’’ ; pOut = newBuf ; delete [ ] newBuf ; return ;}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3