字节(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字符。