字符集小结

最早的是ASCII字符集,它用一个字节的后7位来表示字母、数字、标点和其他常用字符,所以共有0-127个字符;后来又把第一位用上用来表示其他特殊的字符,这样就可以表示0-255个字符,这称为ASCII扩展字符集

后来由于其他国家使用的的文字个数远超过使用英语国家的这些256个字符,所以为了支持本国语言在计算机上显示,不同国家开发出了不同的字符集,比如中国大陆一开始使用GB2312,后来扩展成了GBK(完全兼容GB2312),后来又扩展成了GB18030(支持少数民族语言)。而香港、台湾地区使用BIG5,日本使用Shift_JIS字符集。 

GBK编码使用1或2个字节来表示一个字符,比如使用1个字节来表示英文等ASCII字符,使用2个字节来表示一个汉字。对于双字节来说其第一个字节的取值范围是81–FE(129–254),因此如果用一个signed来保存其第一个字节的话,它会是一个负数。

ANSI表示各语言使用的标准化的字符集,比如英文的ANSI字符集是指ASCII,简体中文的ANSI字符集指GBK、日文是Shift_JIS。

MBCS(multi-byte character set)是多字节字符集的意思,他也不是指某个具体的字符集,而是符合这种编码方式的字符集的统称。上面说过,许多非英文国家和地区发明并使用了不同的编码方式(GBK, BIG5, Shift_JIS等),这些本地字符编码就统称为MBCS。常见的有用一个字符来表示一个英文字符,用两个字节来表示一个本地字符的,如GBK,所以又延伸出了DBCS(double byte character set)也就是是双字节字符集这个统称。在VS中工程设置中可以看到有“使用多字节字符集”这个设置,对于我们来说这个就是使用GBK了。

由于不同国家使用不同的本地字符集,其互不兼容,所以后来就出现了UNICODE,它包含了全球不同国家都可以统一使用的字符集。UNICODE其实是一种统称,其具体实现方式又可以分为UTF-8、UTF-16、UTF-32等,而且一般情况下我们说unicode字符集的话默认指的是utf16。

UTF-8是一种变长字符编码,它使用1-6个字节来存储一个字符,比如使用1个字节来存储英文字符,使用2个字符来存储拉丁文,使用3个字符来存储大部分汉字。互联网上基本上都使用UTF-8字符集。

UTF-16使用2或4个字节来存储一个字符,其大部分字符使用2个字节存储就可以了,所以其也是一种变长字符编码。在windows API中,UTF-16被仅以2个字节来存储,因为这两个字节可以表示大部分的字符,比如sizeof(wchar_t)的大小为2,而在linux上的UTF-16是以4个字节存储的,一个wchar_t占4个字节。不同系统对于UTF-16的字节存储顺序会有所不同,Mac会使用大端序(Big-Endian)而Windows和Linux使用小端序(Little-Endian),比如说在Windows下以UTF-16编码保存一个字符“乙”,在Mac OS环境下打开会显示成“奎”。

如果没有特别指出的话,我们说使用UNICODE字符集就是指使用UTF-16字符集,如VS设置中使用UNICODE字符集的话即表示使用UTF-16字符编码,使用多字节字符集的话对于我们就是使用GBK。

在代码中的字符串常量不加L的话是以当前系统使用的字符集来编码的(一般我们的windows使用GBK,linux使用UTF-8),加了L则表示使用UTF16编码。

转载于:https://www.cnblogs.com/milanleon/p/5196839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值