各种字符编码间的转换方法:MultiByteToWideChar和MultiByteToWideChar答案.doc

各种字符编码间的转换方法:MultiByteToWideChar和MultiByteToWideChar答案.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MultiByteToWideChar和MultiByteToWideChar对各种字符编码间的转换 int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar ); 此函数把宽字符串转换成指定的新的字符串,如ANSI,UTF8等,新字符串不必是多字节字符集。参数: CodePage: 指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,你也可以使用如下所示代码页之一。 参数说明: 1、CodePage——指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,可选择以下代码页: CP_ACP?? //当前系统ANSI代码页? ????????? CP_MACCP?? //当前系统Macintosh代码页? ????????? CP_OEMCP?? //当前系统OEM代码页,一种原始设备制造商硬件扫描码? ????????? CP_SYMBOL //Symbol代码页,用于Windows 2000及以后版本 ????????? CP_THREAD_ACP //当前线程ANSI代码页,用于Windows 2000及以后版本 ????????? CP_UTF7 //UTF-7,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL? ????????? CP_UTF8 //UTF-8,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL ????????? 用 GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文,949:韩文 2、dwFlags—— 一般用 0 就可以了 ????????? 指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符: ????????? MB_PRECOMPOSED //总是使用预制字符,即有单个预制字符时,就不会使用分解的基字符和不占空间字符。此为函数的默认选项,不能和MB_COMPOSITE合用MB_COMPOSITE //总是使用分解字符,即总是使用基字符+不占空间字符的方式? MB_ERR_INVALID_CHARS //设置此选项,函数遇到非法字符就失败并返回错误码 ERROR_NO_UNICODE_TRANSLATION,否则丢弃非法字符 MB_USEGLYPHCHARS //使用像形字符代替控制字符 3、lpMultiByteStr //要转换的字符串 4、cbMultiByte //要转换字符串的长度,-1表示转换到字符串结尾。返回原字符串长度。0 作为结束符的字符串 5、lpWideCharStr//接收转换后输出的宽字符串的缓冲,如果为 NULL, 就是代表计算生成的字符串的长度。 6、cchWideChar//输出缓冲区大小,转化生成的 unicode 字符串缓存的容量。如果为0,lpMultiByteStr将被忽略,函数将返回所需缓冲区大小而不同 ???? 为0表示调用失败;当cchWideChar为0时,函数将返回所需缓冲区大小 int BufSize = MultiByteToWideChar(936,0,s,-1,NULL,0); //计算简体中文字符串 s 转成 widestring 之后占用的内存字节数…… //在此处为 wsbuf 分配内存 BufSize 个字节 MultiByteToWideChar(936,0,s,-1,wsbuf,BufSize); //把简体中文字符串 s 转化为 unicode 的 WideString 最常用的应该是CP_ACP和CP_UTF8了,前者将宽字符转换为ANSI,后者转换为UTF8。? 例一:Unicode转换到GBK #include Windows.h? #define CODE_PAGE_GB18030 54936 int Unicode2GBK( wchar_t *pUnicode, char** ppDest) { // get the size of the dest string? const int size = ::WideCharToMultiByte( CODE_PAGE_GB18030, 0/* you can do more for it*/, pUnicode, -1, 0, 0, 0, 0 );? if ( size ==

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档