关于 编码格式 字符集 的理解(什么是Unicode什么是UTF-8)

来源:互联网 发布:十大经典排序算法 编辑:程序博客网 时间:2024/04/29 15:40

1.综述

简单来说:Unicode 是「字符集」UTF-8 是「编码规则」其中:字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:
U+ 0000 ~ U+ 007F : 0XXXXXXX
U+ 0080 ~ U+ 07FF : 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF : 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

2.为什么不都用Unicode

unicode不完美,这里就有两个的问题,一个是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费,文本文件的大小会因此大出二三倍,这是难以接受的。所以在传输和储存的时候都会用什么gb2312,gbk,utf-8,来处理。但是真正在机器上显示啊,计算啊,用的是Unicode。

1.3举个例子

以java 里面为例子
字符在java里内部处理一律用的是Unicode。只有传输和储存的时候才会用gb2312,gbk,utf-8,来处理。

原创粉丝点击