当前位置: 首页 > 面试题库 >

为什么Java char使用UTF-16?

有宏邈
2023-03-14
问题内容

最近,我阅读了很多有关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成为最简单的自然进程。



 类似资料:
  • 问题内容: 我想将jsoup解析为utf -8,但我不能。我尝试了我所知道的一切,然后在Google上进行了搜索。 我的目标是: 但是 不是。 请帮忙 问题答案: 淘汰 你好世界Öçasasa

  • 问题内容: 我知道这是习惯,但是为什么呢?是否存在真正的技术原因,为什么任何其他方式都不是一个好主意,还是仅基于编码和向后兼容的历史?另外,不使用,而是使用其他一些编码(最值得注意的是)有什么危险? 编辑:通过交互,我主要是指和。 问题答案: 部分原因是文件系统期望NUL(’\ 0’)字节终止文件名,因此UTF-16不能很好地工作。您必须修改很多代码才能进行更改。

  • Apache CouchDB是最新的数据库之一。 CouchDB具有无模式的文档模型,更适合常见应用。可支持非常大数据量查询。 使用CouchDB的主要原因是什么? CouchDB易于使用。 有一个单词可以描述CouchDB - “Relax”。 它也是组成CouchDB官方标志一个单词。 “Apache CouchDB已经开始了,现在是放松时间。” CouchDB具有基于HTTP的REST AP

  • DevOps允许敏捷开发团队实施持续集成和持续交付。这有助于他们更快地将产品推向市场。 其他一些的重要原因是: 可预测性:DevOps可以显着降低新版本的故障率 再现性:版本一切,以便可以随时恢复早期版本。 可维护性:在新版本崩溃或禁用当前系统的情况下,可以毫不费力地进行恢复。 交付/上市时间:DevOps通过简化的软件交付将上市时间缩短至50%。对于数字和移动应用尤其如此。 更高的质量:DevO

  • Akka平台提供哪些有竞争力的特性? Akka提供可扩展的实时事务处理。 Akka为以下目标提供了一致的运行时与编程模型: 垂直扩展(并发) 水平扩展(远程调用) 高容错 这个模型是唯一需要学习和掌握的,它具有高内聚和高一致的语义。 Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心——akka-actor是非常小的,可以方便地加入你的应用中,提供

  • 问题内容: 我经常在PHP中看到包含include.inc文件的示例。.inc是什么意思?它的作用是什么?使用它的缺点和优点是什么? 问题答案: 它没有任何意义,只是一个文件扩展名。如果扩展名是.inc的文件被设计为包含在其他PHP文件中,这是某些人的惯例,但这只是惯例。 它确实存在一个可能的缺点,即通常没有将服务器配置为将.inc文件解析为php,因此,如果该文件位于您的Web根目录中,并且您的