SBCS、DBCS、ASCII、MBCS(ANSI)、Unicode

1.三种编码方式和三种字符类型。

  • 第一种编码方式是单字节字符集,称之为 SBCS,它的所有字符可用一个字节存储。ASCII 码就是SBCS。SBCS字符串由一个零字节结尾。
  • 第二种编码方式是多字节字符集,称之为 MBCS,它包含的字符中有单字节长的字符,也有多字节长的字符。Windows 用到的 MBCS 只有二种字符类型,单字节字符和双字节字符。因此Windows 中用得最多的字符是双字节字符集,即 DBCS,通常用它来代替 MBCS。
  • 第三种编码方式是Unicode。 Unicode 只是一个字符集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,通常说 Unicode 字符,指的是 UTF16,既所有字符都以双字节存储,故有时也将 Unicode 称为宽字符集(Wide characters)。

2.ASCII、MBCS、ANSI、Unicode编码的关系和区别

  • ASCII 编码 0~127 使用一个字节即可表示;
  • 为了扩充 ASCII 编码,以用于显示本国的语言,不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种文字延伸编码方式,称为 ANSI 编码,又称为MBCS(Muilti-Bytes Charecter Set,多字节字符集),它是编码的一种类型,而不是某个特定编码的名称。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,所以在中文 Windows 系统下要转码成 GB2312,只需要把文本保存为 ANSI 编码即可。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。一个很大的缺点是,同一个编码值,在不同的编码体系里代表着不同的字。这样就容易造成混乱。导致了 Unicode 码的诞生。
  • GBK 字符集是 GB2312 的扩展,它是一种双字节编码,可以表示21003个汉字和符号。

  • 为防止编码冲突,将所有语言都统一成Unicode编码,该编码内存存储方式有UTF-8,UTF-16和 UTF-32,我们习惯说的 Unicode 实际是说的 UTF-16 这种内存存储方式,这个很多博客都没有说清楚,很多初学者很容易混淆编码和内存表示方式;

3.Unicode 和 MBCS 字符串之间的转换

  • Windows 编程中常常看到函数 WideCharToMultiByte,其第一个参数 CodePage 为CP_ACP时, 指的 UTF-16 表示的 Unicode 字符串 (WCHAR) 转化为 MBCS(CHAR), CodePage 为CP_UTF8 时, 指的 UTF-16 表示的Unicode 字符串 (WCHAR) 转化为 UTF-8 表示的Unicode 字符串(CHAR),
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值