为什么Java char使用UTF-16?
最近,我阅读了很多有关Unicode代码点的信息,以及它们随着时间的演变,并确保我也阅读了http://www.joelonsoftware.com/articles/Unicode.html。
但是我找不到真正的原因是Java为什么将UTF-16用作字符。
例如,如果我的字符串包含1024个ASCII范围的字母。这意味着1024 * 2 bytes
等于2KB的字符串内存,它将以任何方式消耗。
因此,如果Java基本字符为UTF-8,则数据仅为1KB。即使字符串中的任何字符需要2个字节,例如10个“字”字符,自然也会增加内存消耗的大小。(1014* 1 byte) + (10 * 2 bytes) = 1KB + 20 bytes
结果不是很明显,1KB + 20 bytes VS.2KB
我没有说过ASCII,但是我对此的好奇心是为什么它不是UTF-8,它也只处理多字节字符。UTF-16看起来很浪费任何包含很多非多字节字符的字符串。
这背后有什么充分的理由吗?
回答:
Java
在2004/2005过渡到UTF-16之前使用了UCS-2。最初选择UCS-2的原因主要是历史原因:
Unicode最初设计为固定宽度的16位字符编码。Java编程语言中的原始数据类型char旨在通过提供可以容纳任何字符的简单数据类型来利用此设计。
UnicodeFAQ页面进一步说明了这一点以及UTF-16的诞生:
最初,Unicode被设计为纯16位编码,旨在表示所有现代脚本。(古代的脚本用专用字符来表示。)随着时间的流逝,尤其是在添加了超过14,500个复合字符以与传统集兼容的情况下,很明显16位不足以满足用户需求。由此产生了UTF-16。
正如@wero已经提到的那样,使用UTF-8不能有效地完成随机访问。因此,万事俱备,UCS-2似乎是当时的最佳选择,尤其是在该阶段尚未分配任何补充字符的情况下。然后,这使UTF-16成为最简单的自然进程。
以上是 为什么Java char使用UTF-16? 的全部内容, 来源链接: utcz.com/qa/409344.html