Unicode与ASCII内存

时间:2017-02-10 20:39:38

标签: unicode

在内存方面,Unicode和ASCII有什么区别? Unicode和ASCII在内存中占用多少内存?我知道在Unicode中它取决于编码类型(UTF-8,UTF-16等...)。但我需要更深入的了解!

1 个答案:

答案 0 :(得分:2)

简而言之,ASCII使用7位代码点(即7位唯一标识每个字符),其中使用21位代码点定义Unicode(0 hex 到10FFFF hex ,定义为17个65536/16位字符的平面,产生1,114,112个字符 - 最接近的2的幂是2 21 )。使用多少内存取决于它在内存中的编码方式(不一定与用于外部化文件中数据的序列化编码相同,通常是Unicode的UTF编码之一)。

实际上,ASCII在RAM中每个字节存储为一个字符,很少看到纯ASCII,特别是在美国之外 - 更常见的是看到ISO8859-1(完全兼容的8位编码)使用ASCII,但其他字符使用可用的额外位,例如某些欧洲国家需要的£和¡字符。

Unicode更复杂,表示方式也有很大不同:

  • Java使用16位字符和“代理对”的概念来表示“基本多语言平面”之外的值(基本上是在Unicode 2.0之后添加的任何字符)。这是历史性的;早期版本的Unicode每个字符仅使用16位。
  • 在C中,使用可变长度的UTF-8编码作为内存中表示通常是有意义的 - 毕竟char是一个字节,但是这样的编码在解码时会产生很小的性能损失(它使得尝试找到第n个代码点更加困难,因为必须有效地遍历编码的字节数组,以识别每个字符的开头。)
  • 使用UTF-32(以前称为UCS-4)也可能有意义,因为它以32位整数编码所有Unicode代码点,其方式与存储在8位整数中的ASCII类似。

Joel's article是这个主题的金读。