UTF-8与GB2312之间的互换 .

来源: http://blog.csdn.net/ryanzz/article/details/6078142

 

 

如果您对UTF-8、Unicode、GB2312等还是很陌生的话,请查看http://www.linuxforum.net/books/UTF-8-Unicode.html

下面介绍一下WinAPI的两个函数:WideCharToMultiByte、MultiByteToWideChar。

函数原型:

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, // buffer 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 to map

 int cbMultiByte, // number of bytes in string

 LPWSTR lpWideCharStr, // wide-character buffer

 int cchWideChar // size of buffer

);//将多个窄字符转换成宽字符
要实现 GB2312 (其实是GBK)转换为 UTF-8 其实很简单,先用 MultiByteToWideChar 把 GB2312 转换为 Unicode,再用 WideCharToMultiByte 把 Unicode 转换为 UTF-8 就可以了。



UTF-8 转换为 GB2312 是个相反的过程,先用 MultiByteToWideChar 把 UTF-8 转换为 Unicode,再用 WideCharToMultiByte 把 Unicode 转换为 GB2312 就可以了。
给出2个小函数供参考:
// UNICODE to GB2312,即把UNICODE变为普通单字节字符
char *cstring2char(CString str)

{

   int len = str.GetLength();

   int nByte = WideCharToMultiByte(CP_ACP,0,str,len,NULL,0,NULL, NULL );

   char *buf = new char[nByte+1];

   nByte = WideCharToMultiByte(CP_ACP,0,str,len,buf,nByte,NULL, NULL );

   buf[nByte] = '/0';

   char *pchar = _strdup( buf);

   delete buf;
   return pchar;

}
// UNICODE to UTF8,即把UNICODE变为UTF8字符
char *UniCode2UTF8(CString str)

{

   int len = str.GetLength();

   int nByte = WideCharToMultiByte(CP_UTF8,0,str,len,NULL,0,NULL, NULL );

   char *buf = new char[nByte+1];

   nByte = WideCharToMultiByte(CP_UTF8,0,str,len,buf,nByte,NULL, NULL );

   buf[nByte] = '/0';

   char *pchar = _strdup( buf);

   delete buf;
   return pchar;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值