字符编码 摘要

来源:互联网 发布:魔兽九种兵器修改数据 编辑:程序博客网 时间:2024/05/20 17:07

基本知识

字符编码 Unicode UTF Big-endian Little-endian


字符编码 Character encoding

目的是,将字符编码和字符集中的对象一一对应,以便文本在计算机和网络间存储。

早期的字符编码是ASCII码 American Standard Code for Information Interchange。

标准ASCII码有7个二进制位,即一个字节。共有128个字符,96个可打印,32个控制字符。

扩展ASCII码在标准ASCII码上扩充一个字节,IBM推出,不是国际标准。

ISO8859-1 单字节 英文编码。

GB2312/GBK 双字节 汉字国标码。


Unicode

1994年,为了解决ISO8859-1字符编码的兼容问题,产生了Unicode码。

统一编码,用来表示所有语言的字符,定长双字节。

为了兼容其他编码方式,首256字符保留给ISO 8859-1所定义的字符。Java内部是使用Unicode进行编码的。

字符对应一个代码点 code point。表示Unicode字符时,通常用U+后跟16进制。范围是0-0x10ffff,共1114112个字符。

UCS-2,Universal Character Set coded in 2 octets。用两个字节表示代码点。

UCS-4,用四个字节表示代码点。

UCS规定了代码点和字符的关系。

UTF规定了存储方式。Unicode Transformation Format

UTF-16由RFC2781规定,它使用两个字节来表示一个代码点。

对应于UCS-2,用BOM,Byte Order Mark来表示文件是Big Endian or Little Endian。

UCS-2中并没有定义U+FFFE,通过FE和FF的字节顺序可知是Big 还是 Little


Big-endian Little-endian

Big Endian指的是低地址存放最高有效位MSB

Little Endian指的是低地址存放最低有效位LSB

一个例子:
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为

           Big-endian     Little-endian
0x0000     0x12              0xcd
0x0001     0x34              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12


Little Endian不用考虑地址转换的问题。


UTF-8、UTF-16、UTF-32是将数字转换成程序数据的编码方案。



0 0
原创粉丝点击