字符编码的相关笔记

本文深入浅出地介绍了ASCII、ANSI、Unicode等字符编码的概念及其区别。从简单的ASCII编码讲起,逐步过渡到复杂的Unicode编码,并详细解释了UCS-2、UTF-16和UTF-8的具体实现方式。

1. ASCII

一个字节中前7个bit的低128个字符表示.

2. ANSI

利用第8个bit, 即数字128 - 255的高128表示.  每个地区有不同的表示方式, 这种相异的编码系统称为代码页code page.

因为某些语言有上千个字符, 一个字节无法表示这么多字符, 所以有了双字节字符集DBCS(Double-byte charater set) 的解决方案,  即有的字母使用一个字节来表示, 有的使用两个字节.

3. Unicode

在Unicode中一个字符被映射到一个码点(code point), 可以理解成一个字符在字符表中的位置. 例如, Hello 对应的码点为 U+0048 U+0065 U+006C U+006C U+006F (十六进制).

Unicode并没有规定如何实储存这些码点.

最早的编码实现是把每个码点都储存到两个字节中, 称之为UCS-2或者UTF-16. 因为有小端序和大端序的区别( 参考wiki: 字节序 ), 所以人们就必须使用FE FF作为每一个Unicode字符串的开头, 称之为字节序标记(Unicode Byte Order Mark). 如果互换了高位与低位,就变成了FF FE,这样读取这个字符串的程序就知道后面字节也需要互换了. 但是, 不保证每一个Unicode字符串都有字节序标记.

UTF-8是另一个系统,用来存储字符串所对应的Unicode的码点 (code points)-即那些神奇的U+数字组合,在内存中,而且存储的最小单元是8比特的字节。在UTF-8中,0-127之间的码字都使用一个字节来存储, 超过128的码字使用2,3甚至6个字节来存储。  

转载于:https://www.cnblogs.com/FlyingCat/archive/2010/03/13/hello-fuck.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值