资源描述:
《各种字符编码间的转换方法:multibytetowidechar和multibytetowidechar》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MultiByteToWideChar和MultiByteToWideChar对各种字符编码间的转换函数原型:intWideCharToMultiByte(UINTCodePage,DWORDdwFlags,LPCWSTRlpWideCharStr,intcchWideChar,LPSTRlpMultiByteStr,intcbMultiByte,LPCSTRlpDefaultChar,LPBOOLlpUsedDefaultChar);此函数把宽字符串转换成指定的新的字符串,如ANSI,UTF8等,新字符串不必是多字节字
2、符集。参数:CodePage:指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,你也可以使用如下所示代码页之一。参数说明:1、CodePage——指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,可选择以下代码页:CP_ACP //当前系统ANSI代码页 CP_MACCP //当前系统Macintosh代码页 CP_OEMCP //当前系统OEM代码页,一种原始设备制造商硬件扫描码 CP_SYMBOL//Symbol代码页
3、,用于Windows2000及以后版本 CP_THREAD_ACP//当前线程ANSI代码页,用于Windows2000及以后版本 CP_UTF7//UTF-7,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL CP_UTF8//UTF-8,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL 用GetLocaleInfo函数获取当前系统的代码页,936:简体中文,950:繁体中文
4、,949:韩文2、dwFlags——一般用0就可以了 指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符: MB_PRECOMPOSED//总是使用预制字符,即有单个预制字符时,就不会使用分解的基字符和不占空间字符。此为函数的默认选项,不能和MB_COMPOSITE合用MB_COMPOSITE//总是使用分解字符,即总是使用基字符+不占空间字符的方式 MB_ERR_INVALID_CHARS//设置此选项,函数遇到非法字符就失败并返回错误码ERROR_N
5、O_UNICODE_TRANSLATION,否则丢弃非法字符MB_USEGLYPHCHARS//使用像形字符代替控制字符3、lpMultiByteStr//要转换的字符串4、cbMultiByte//要转换字符串的长度,-1表示转换到字符串结尾。返回原字符串长度。0作为结束符的字符串5、lpWideCharStr//接收转换后输出的宽字符串的缓冲,如果为NULL,就是代表计算生成的字符串的长度。6、cchWideChar//输出缓冲区大小,转化生成的unicode字符串缓存的容量。如果为0,lpMultiByteStr将
6、被忽略,函数将返回所需缓冲区大小而不同 为0表示调用失败;当cchWideChar为0时,函数将返回所需缓冲区大小intBufSize=MultiByteToWideChar(936,0,s,-1,NULL,0);//计算简体中文字符串s转成widestring之后占用的内存字节数……//在此处为wsbuf分配内存BufSize个字节MultiByteToWideChar(936,0,s,-1,wsbuf,BufSize);//把简体中文字符串s转化为unicode的WideString最常用的应该是CP_ACP和
7、CP_UTF8了,前者将宽字符转换为ANSI,后者转换为UTF8。 例一:Unicode转换到GBK#include #defineCODE_PAGE_GB1803054936intUnicode2GBK(wchar_t*pUnicode,char**ppDest){//getthesizeofthedeststring constintsize=::WideCharToMultiByte(CODE_PAGE_GB18030,0/*youcandomoreforit*/,pUnicode,-1,0,
8、0,0,0); if(size==0){return-1;} char*pDestString=newchar[size+2];::memset(pDestString,0,sizeof(pDestString));//transformintret=::WideCharToMultiByte(CODE_PAGE_G