Unicode编码及其编码方式

什么是 Unicode

Unicode (或者叫 Unicode 编码)是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有 65536 个码位,共 1114112 个。然而目前只用了少数平面。

在 Unicode 官网可以看到一张张巨大的编码表。

编码方式

Unicode 只是一张巨大的编码表,这个数字(编码)怎么在计算机中存储呢?用多少位?这就是编码方式了,比如 UTF-16、UTF-8。

下图是 Unicode 与它其中的一种编码方式

Unicode编码及其编码方式_第1张图片

UTF-16

Unicode 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是 16 位来统一表示所有的字符。

Java 的 char 类型就是 UTF-16 编码,还记得 char 类型占 2 个字节吗?

UTF-8

UTF-8 是一种变长的编码方式,它把一个 Unicode 字符根据不同的数字大小编码成 1-6 个字节,常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6 个字节。

UTF-8 编码规则如下:

  • 单字节的字符,字节的第一位设为 0,对于英语文本,UTF-8 码只占用一个字节,和 ASCII 码完全相同;

  • n 个字节的字符(n>1),第一个字节的前 n 位设为 1,第 n+1 位设为 0,后面字节的前两位都设为 10,这 n 个字节的其余空位填充该字符 unicode 码,高位用 0 补足。

举粟

一个字节:0xxxxxxx
两个字节:110xxxxx 10xxxxxx
三个字节:1110xxxx 10xxxxxx 10xxxxxx
四个字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

你可能感兴趣的:(编程基础)