MBS与Unicode字符的相互转换
2013-04-25 07:40
302 查看
共有3种方法
1. Windows API
2. C API
3. ATL中的转换宏
第一种方法(windows API)
主要使用WideCharToMultiByte与MultiByteToWideChar这两个函数
其中CP_ACP与CP_OEMCP一样。
第二种方法(C API)
主要使用wcstombs与mbstowcs
第三种方法ATL转投宏(最简单)
CA2W 将单字节转换为宽字节
CW2A 将宽宽限转换为单字节
补充:unicode与utf8的相互转换
ATL宏转换
1. Windows API
2. C API
3. ATL中的转换宏
第一种方法(windows API)
主要使用WideCharToMultiByte与MultiByteToWideChar这两个函数
string str="字符转换测试A"; wstring wstr=L"字符转换测试A"; /*宽字节转换为单字节 计算转换所需的字节数,包括NULL字符*/ int size1=WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,NULL,0,NULL,false); //size为14 char *dest1=new char[size1]; WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,dest1,size1,NULL,false); cout<<dest1; delete[] dest1 //单字节转换为宽字节 int size2=MultiByteToWideChar(CP_ACP,0,str.c_str(),-1,NULL,0); //size为8 WCHAR *dest2=new WCHAR[size2]; MultiByteToWideChar(CP_ACP,0,str.c_str(),-1,dest2,size2); delete[] dest2
其中CP_ACP与CP_OEMCP一样。
第二种方法(C API)
主要使用wcstombs与mbstowcs
//计算转换为单字节的长度(不含\0字符),只有中文字符可以这样算,中英混合长度就比实际大, //对实际结果影响不大 int size1=wcstombs(NULL,wstr.c_str(),0)*2+1; //size为15 char *dest1=new char[size1]; setlocale(LC_ALL,""); //设置本地默认Locale wcstombs(dest1,wstr.c_str(),size1); setlocale(LC_ALL,"C"); //设置单字节 cout<<dest1; //计算转换为宽字节的长度,可能比实际大 int size2=mbstowcs(NULL,str.c_str(),0)+1; //size为14 WCHAR *dest2=new WCHAR[size2]; setlocale(LC_ALL,""); //设置本地默认Locale mbstowcs(dest2,str.c_str(),size2); setlocale(LC_ALL,"W"); //设置宽字节 cout<<dest2;
第三种方法ATL转投宏(最简单)
CA2W 将单字节转换为宽字节
CW2A 将宽宽限转换为单字节
CA2W str("hello, world"); WHCAR * str2=str; CW2A str=L"hello, world"; char * str2=str;
补充:unicode与utf8的相互转换
//unicode 转utf8 WCHAR *str=_T("中文abc"); int i = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, FALSE); //8 char *utf8=new char[i]; int j=WideCharToMultiByte(CP_UTF8, 0, str, -1, utf8, i, NULL, FALSE); //utf8转unicode int k = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); //6 WCHAR *strSrc = new WCHAR[k]; MultiByteToWideChar(CP_UTF8, 0,utf8, -1, strSrc, k); MessageBox(strSrc);
ATL宏转换
//unicode转utf8 CW2A str(_T("中国abc"),CP_UTF8); //uft8转unicode CA2W str3(str,CP_UTF8);
相关文章推荐
- unicode字符和多字节字符的相互转换接口
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- unicode字符和String类型相互转换
- unicode字符和多字节字符的相互转换接口
- UNICODE下宽字符的CString转换为const char *和char到WCHAR的相互转换
- Java String字符串和Unicode字符相互转换代码(包括混有普通字符的Unicode)
- Unicode字符与GB2312的相互转换
- UNICODE 码和字符的相互转换
- js中 字符串与Unicode 字符值序列的相互转换
- WINDOWS CE下ANSI 与 Unicode 字符相互转换
- 中文字符 与 十六进制Unicode编码 相互转换
- 中文和unicode字符的相互转换
- JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换[引]
- 第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- UNICODE与ANSI编码的字符间的相互转换
- Java String字符串和Unicode字符相互转换代码
- Java String字符串和Unicode字符相互转换代码
- native2ascii 中文字符与Unicode编码相互转换
- Wince下GB(国标字符)和Unicode的相互转换方法