我了解的字符编码
学习了一些编码知识,想对其进行记录并加入一些我的体会
ASCII码
美国信息交换标准代码.
信息科学起源于美国,最初的编码也起源于美国,所以ASCII码里的文字编码只有英文字符
- 采用1Byte(8位二进制数)编码,所以最多只有256种可能的字符
- 被大部分后来的编码兼容,这也是为什么我们在改变编码时英文字符不会乱码
GBK
汉字内码扩展规范
在ASCII的基础上扩展了汉字编码,每个字符占2个字节
GB2312 -> GBK(支持繁体) -> GB18030(加入了日文,朝鲜语等)
UNICODE 字符集
Unicode 的建立旨在统一编码,在世界上大多数书写系统中表达的文本都被其包含
UTF-8
utf-8 是万维网上的主要编码,在编程时,也大多使用utf-8进行编码
采用变长编码,存储效率比较高,推荐使用
UTF-16 与 UTF-32
utf-16 为定长编码,固定2个字节,Java中程序内部的编码便为utf-16
utf-32 采用4字节 处理速度较快,但浪费了大量的空间,影响传输速度,较少被使用.
ANSI编码
- Windows上非Unicode的默认编码
- 不同系统的默认编码不同
- 记事本默认采用ANSI保存,所以使用其他编辑器打开记事本写的文件,汉字可能会乱码
字节序
在一些编码中,高低位字节存储顺序不同.
- Big Endian : 高位字节存在低地址,低字节存在高地址
- Little Endian : 与前者相反
例如, 0XABCD
Big Endian:
0000: AB
0001: CD
Little Endian:
0000: CD
0001: AB