C++字符串完全指南 - Win 32 字符编码(一) 前言 字符串的表现形式各异,象TCHAR,std::string,BSTR 等等,有时还会见到怪怪的用_tcs 起头的宏
这个指南的目的就是说明各种字符串类型及其用途,并说明如何在必要时进行类型的相互转换
在指南的第一部分,介绍三种字符编码格式
理解编码的工作原理是致为重要的
即使你已经知道字符串是一个字符的数组这样的概念,也请阅读本文,它会让你明白各种字符串类之间的关系
指南的第二部分,将阐述各个字符串类,什么时候使用哪种字符串类,及其相互转换
字符串基础 - ASCII, DBCS, Unicode 所有的字符串类都起源于C 语言的字符串,而 C 语言字符串则是字符的数组
首先了解一下字符类型
有三种编码方式和三种字符类型
第一种编码方式是单字节字符集,称之为 SBCS,它的所有字符都只有一个字节的长度
ASCII 码就是SBCS
SBCS 字符串由一个零字节结尾
第二种编码方式是多字节字符集,称之为 MBCS,它包含的字符中有单字节长的字符,也有多字节长的字符
Windows 用到的MBCS 只有二种字符类型,单字节字符和双字节字符
因此 Windows 中用得最多的字符是双字节字符集,即 DBCS,通常用它来代替 MBCS
在 DBCS 编码中,用一些保留值来指明该字符属于双字节字符
例如,Shift-JIS(通用日语)编码中,值0x81-0x9F 和 0xE0-0xFC 的意思是:“这是一个双字节字符,下一个字节是这个字符的一部分”
这样的值通常称为前导字节(lead byte),总是大于 0x7F
前导字节后面是跟随字节(trail byte)
DBCS 的跟随字节可以是任何非零值
与 SBCS 一样,DBCS 字符串也由一个零字节结尾
第三种编码方式是 Unicode
Unicode 编码标