字符编码及其转换

一、 字符编码

1. ASCII(单字存储)

ASCII码使用单字存储,即8位存储,所以最多只能编码256个字符,主要为西文服务。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充ASCII码。

2. ANSI(单字存储,也可以理解为单双字混存)

ANSI是ASCII字符集的扩充,在存储ASCII字符的时候,就使用ASCII编码单字存储(标准ASCII码,第8位为0);而在存储像中文这样需要双字存储的字符时,使用两个扩充ASCII码(扩充ASCII码,第8位为1),系统解码时找两个扩充码解码。

简体中文字符编码GB-2312就是ANSI字符集,由6763个常用汉字和682个全角的非汉字字符组成,一些生僻字是显示不出来的。

ANSI字符集的缺点就是国际不通用,在简体中文操作系统中 ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,解码时可能最终显示的是中文,也可能显示的是日文。

3. Unicode(双字存储,Unicode编码标准中也有4字存储标准)

可以表示65536个字符。将世界上几乎所有语言的常用字符收录其中,方便了信息交流(与ANSI编码不同,Unicode编码国际通用,每个编码代表世界上唯一的一个字符)。标准的Unicode称为UTF-16。前128个字符位和ASCII码兼容,例如,在ASCII码中‘A’为单字0x41,在ANSI中‘A’为双字0x0041

4. UTF-8,UTF-16和UTF-32。

Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF-8和ASCII中,“A”的编码都是0x41.
UTF-16和UTF-32分别是Unicode的16位和32位编码方式。

二、 编程中的字符编码

  • 在Windows编程中,调用库函数时有两种库函数,一种是以“A”结尾的ANSI版本函数,另一种是以“W”结尾的Unicode版本函数。
  • A型函数传参时必须传入ANSI字符串
  • W型函数传参时必须传入Unicode字符串

三、 多字节字符集和Unicode字符集

  • 如果在编译器设置中将字符集设置成多字节字符集,那么在编译时系统会把字符串编码为ANSI字符串;
  • 如果设置成Unicode字符集,那么将编码为Unicode字符串。
  • 如果在字符串前加上字母“L”,不管编译器设置如何,字符串都将编译为Unicode字符串

四、 Unicode与ANSI之间转换字符串?

  • character string 表示多字符集字符集字符串
  • wide-character string 表示Unicode字符串

  • Windows函数:
    MultiByteToWideChar将多字节字符串转换成宽字符串;
    WideCharToMultiByte将宽字符串转换成多字节字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值