C++常用字符编码简介.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++常用字符编码简介.pdf

常用字符编码简介 (char,CHAR,WCHAR,WARCHAR,LPSTR,LPSWSTR,UNICODE,) 一、三种字符简介(ASCII, DBCS, UNICODE)2 二、常用字符编码的实际类型 3 三、附简单的测试汉字全角字符英文的程序5 一、三种字符简介(ASCII, DBCS, UNICODE) • ASCII 只支持英文,全部为 8 位 • DBCS 支持英文和中文,但中文需要两个字节(16 位),不是等宽的 • UNICODE 支持英文和中文,英文和中文都需要两个字节 ASCII 是 DOS 时代的,无法支持中文。DBCS 是 Win9x 支持的字符集。UNICODE 是 win2k 和 xp 支持的字符集。而汉字的编码目前有 GB2312-1980 和 GB18030-2000 ,GB2312 就是 DBCS 类型的 汉字编码,GB18030 就是 UNICODE 的汉字编码,当然 GB18030 兼容 GB2312 ,也就是说GB18030 也 支持 DBCS 的字符处理方式。虽然 GB18030 是 2000 年后强制执行的国家标准,但目前使用最多的还是 GB2312 编码,而且 GB2312 也足够处理你所用到的汉字了,还有 GBK 编码是 GB2312 的增强版 这里我仅支持 GB2312 由于 GB2312 是中国大陆制定的标准,所以繁体中文并不在 GB2312 的编 码中,如果你的程序需要支持繁体中文,则还需要处理 Big5 编码其实也很简单。 二、常用字符编码的实际类型 下面说一下在 C 中如何处理 GB2312 编码的汉字以 VC6.0 为例,如果声明变量的类型为 wchar_t 则是 UNICODE 编码,如果是 char 则是 DBCS 编码。比如我的一个函数声明是 : void Justify (HDC hdc, PTSTR pText, RECT * prc, int iAlign) 其中的 pText 是 PTSTR 类型,PTSTR 在 WINNT.H 中有两个定义(WINNT.H 中的这段代码我删掉了中 间无关的部分) #ifdef UNICODE typedef LPWSTR PTSTR, LPTSTR;//如果是 UNICODE 编码,则定义 PTSTR 为 LPWSTR 类型 #else typedef LPSTR PTSTR, LPTSTR;//如果是不是 UNICODE 编码,则定义 PTSTR 为 LPSTR 类型 #endif • LPSTR 定义为 CHAR 的指针 • LPSWSTR 定义为 WCHAR 的指针 • CHAR 定义为 char 类型 • WCHAR 定义为 wchar_t 类型 • wchar_t 定义为 unsigned short 类型,它是 16 位,两个字节,无符号短整数 是 UNICODE 还是非 UNICODE 取决于你的编译选项 ,如果在[工程]-[选项]-[C/C++]的[预处理程 序定义]中填入了_UNICODE ,那么程序会用wchar_t 指针来定义 LPSTR ,如果没有_UNICODE ,那么程 序会用 char 指针来定义 LPSTR ,这样带来的区别就是,你接受到的pText 中的字节内容是不一样的,[i 服了 you]这个字串如果在没有定义_UNICODE 的情况下,是 8 个字节,而在定义了_UNICODE 的情况下 是 12 个字节。反映到程序中就是 ,如果没有定义_UNICODE ,那么就要把英文字符当成 1 个字节来处 理,而汉字字符的编码是采用 GB2312 编码规范来的一个汉字 2 个字节 ;如果定义了_UNICODE ,那么 英文字符要当成 2 个字节来处理,而汉字字符的编码是采用 UNICODE 编码来的,一个汉字还是 2 个字 节,只是和英文是登长的。举例来说 ,win98 不采用 UNICODE 编码而采用的是 DBCS 编码,为了让我 的程序既可以在 XP 下运行又可以在 Win98 下运行,我没有定义_UNICODE 这样我的程序代码就要把字 符串当成 DBCS 编码来处理,也就是英文字符是 1 个字节,中文字符是 2 个字节,中文编码采用 GB2312 编码用 Justify 来说明: 我给 pText 传递来[你]这个汉字,那么 p

文档评论(0)

zhoubingchina + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档