字节,字符,编码和存储

来源:互联网 发布:幸运牛抽奖软件注册码 编辑:程序博客网 时间:2024/05/24 00:14

字节(octet):是一个八位的存储单元,取值范围一定是0~255。

字符(character):为语言意义上的符号,范围不一定。例如:A,B,上,中,& 等。

编码(Encode):为每个字符指定一个数值,同时确定数值的表示方法。

存储:字符编码在计算机中存储方式,Big Endian:高字节在前,低字节在后,Little Endian:低字节在前,高字节在后。


他们之间的关系

编码是对字符的一种映射,可以有多种方案。最早的一种编码方案是ASCII。主要用于现代英语和西欧语言。在ASCII编码方案中,只说明了0到127分别代表什么。随着电脑的普及,需要在电脑中显示的字符越来越多。为整合全世界的所有语言文字在电脑中的显示,出现了Unicode。在Unicode中,一个字符被映射到一个叫做码点(code point)的东西,说白了就是一个序号。

对每个字符编号以后,在电脑中如何表示呢?这就涉及到编码的实现。

一种方式是:一个码点用2个字节即16位来表示。这种表示方法就是UTF16.

一种方式是:一个码点用4个字节即32位来表示。这种表示方法就是UTF32.

一种方式是:一个码点用1到4个字节来表示,这种表示方法就是UTF8. 这种表示描述起来有点复杂。


确定了表示的方法,那么如何存储呢?

UTF-16包括三种:UTF-16,UTF-16BE(Big Endian),UTF-16LE(Little Endian)。

UTF-16BE和UTF-16LE不难理解,而UTF-16就需要通过在文件开头以名为BOM(Byte Order Mark)的字符来表明文件是Big Endian还是Little Endian。BOM为U+FEFF这个字符。

与UTF-16类似,UTF-32也包括UTF-32、UTF-32BE、UTF-32LE三种编码,UTF-32也同样需要BOM字符。


原创粉丝点击