unicode - unicode - UTF-8,UTF-16和UTF-32

UTF-8,uTF-16和UTF-32之间的区别是什么?

我知道它们都存储Unicode,而且每个字节都使用不同数量的字节来表示字符,选择哪一个有优势?

时间:

对于ASCII字符表示文本块中的大多数字符的情况,UTF-8具有优势,因为UTF-8将所有字符编码为8位(像ASCII ),更有利的是,仅包含ASCII字符的UTF-8文件具有与ASCII文件相同的编码。

UTF-16更好的地方是,ASCII不是主要的内容,因为它使用了每个字符的2个字节,主要是,UTF-8开始使用3个或更多字节的字符,其中UTF-16保留在大多数字符的2字节中。

UTF-32覆盖4字节的所有可能字符,这让它变得相当臃肿,我无法想到使用它的优势。

简而言之:

  • UTF-8 :可变宽度编码,向后兼容ASCII ,ASCII字符(U+0000到U+007F )取1字节,代码点U+0080到U+07FF取10个字节,代码点U+0800到U+FFFF取4个字节,代码点U+10000到U+10FFFF取4字节,适合英文文本,不太适合亚洲文字。
  • UTF-16 :可变宽度编码,码位U+0000到U+FFFF取2字节,代码点U+10000到U+10FFFF采用4字节,英文文本不好,适合亚洲文字。
  • UTF-32 :固定宽度编码所有代码点占用四个字节,巨大的内存占用,但运算速度很快,很少使用,
  • UTF-8的可变1到4字节。

  • UTF-16可变2或4字节。

  • UTF-32固定4字节。

Unicode是一个标准,关于UTF-x,你可以认为它是一些实际用途的技术实现:

  • UTF-8 -"尺寸优化": 最适合于基于拉丁字符的数据(或ascii ),它只需要1个字节,而且大小相应的符号变量(最多可以增长6个字节),
  • UTF-16 - "平衡":每个字符最少需要2字节,这足以容易地处理字符处理(但是,大小仍然可变),
  • UTF-32 -"性能评估": 允许使用简单的算法作为固定大小字符(4字节)的结果,但是,具有内存缺点

在UTF-32中,所有字符都用32位编码,好处是你可以很容易地计算字符串的长度,缺点是对于每一个ASCII字符,你浪费了三个字节。

在UTF-8字符中,长度可变,ascii字符编码为一个字节(八位),大多数西方特殊字符都是以两个字节或三个字节的形式编码的,更奇怪的字符最多可以占用四个字节,明显的缺点是,你无法计算字符串的长度。但是与UTF-32相比,编码拉丁文(简体中文)字母表文本需要更少的字节。

UTF-16的长度也可变,字符以两个字节或四个字节编码,它具有可变长度,但是,没有像UTF-8一样节省空间的优点。

显然UTF-8是最广泛的。

...