Java为什么使用UTF-16而不是更节省内存的UTF-8

Java使用UTF-16而不是更节省内存的UTF-8是因为UTF-16可以做到大部分常见的文字按2个字节存储,少量不常见的字符按4个字节存储,统计和定位字符的效率比UTF-8高。而UTF-8划分的变长空间多,这方面是个不能忽视的短板。

Java为什么使用UTF-16而不是更节省内存的UTF-8-Worktile社区

所谓UTF-8更节省内存的说法,对广大东亚文字来说根本就是伪命题。UTF-8更省内存只有在文本内绝大部分是ASCII的字符下才成立,也就是只需要一个字节即可表示一个字符,比如英文字母、数字、半角标点符号等。而东亚文字,比如常见的汉字,用UTF-8传输和存储则需要3个字节。相比之下,UTF-16对大部分常见文字只需要2个字节,不常见的文字才需要4个字节。谁更节省内存取决于内容,而不是编码本身。

 Java 当时选择了 UCS-2 与 Windows 一致,而 UCS-2 是定长编码。后来,BMP 已经不够表示 Unicode 了,UCS-2 无法表示,于是就有了 UCS-4,虽然 UCS-4 暂时可以保证定长,但 UCS-4 会显得过于浪费内存。于是,就回到了变长编码。

变长编码是用 UTF-8 还是 UTF-16?显然 UTF-8 有很多优势,因为 UTF-8 在7bit区域跟 ASCII 兼容,而 UTF-16 仅仅只在 BMP 区域与 UCS-2 兼容。

当初用 UCS-2 是因为它定长,而随着 Unicode 字符数量的暴增,UCS-2 无法定长,就变成了一个相对鸡肋的编码,为了保持兼容性只能继续存在。

UTF-16除了兼容UCS-2以外并无明显优势,毕竟UTF-16是变长编码。

来源:https://www.zhihu.com/question/308677093/answer/2748610506

https://www.zhihu.com/question/308677093/answer/2745757552

延伸阅读

UTF-8和UTF-16的区别

1、主要的UTF-8优点:

  • 基本的ASCII字符如数字,没有重音的拉丁字符等占用一个与US-ASCII表示相同的字节。 通过这种方式,所有US-ASCIIstring都变成了有效的UTF-8,在很多情况下它提供了不错的向后兼容性。
  • 没有空字节,它允许使用以空字符结尾的string,这也引入了大量的向后兼容性。
  • UTF-8与字节顺序无关,因此您不必担心Big Endian / Little Endian问题。

2、主要的UTF-8缺点:

  • 许多常见的字符长度不同,这会减慢编码点的索引,并可能会严重计算编码点数。
  • 即使字节顺序并不重要,但有时UTF-8仍然具有BOM(字节顺序标记),用于通知文本以UTF-8编码,并且即使文本只包含ASCII字符也不兼容ASCII软件。 微软软件(如记事本)特别喜欢把BOM添加到UTF-8。

3、主要的UTF-16优点:

  • BMP(基础多语言平面)字符,包括拉丁文,西里尔文,大多数中文(中华人民共和国支持强制性BMP以外的一些代码点),大多数日文可以用2个字节表示。 如果文本不包含补充字符,这将加快索引和计算代码点数。
  • 即使文本具有补充字符,它们仍由16位值对表示,这意味着总长度仍可被2整除,并允许使用16位char作为string的基本组成部分。

4、主UTF-16缺点:

  • 在US-ASCIIstring中有很多空字节,这意味着没有以空字符结尾的string和大量浪费的内存。
  • 在许多常见情况下(特别是在美国/欧盟/西里尔字母/以色列/阿拉伯国家/伊朗等国家),使用它作为固定长度编码“通常会起作用”,如果不这样做,通常会导致断开的支持。 这意味着程序员必须注意代理对,并在重要的情况下正确处理它们!
  • 它的长度是可变的,所以对码点进行计数或索引是很昂贵的,尽pipe比UTF-8less。

一般来说,UTF-16通常比内存表示更好,因为BE / LE在那里是不相关的(只是使用本地顺序),索引更快(只是不要忘记正确处理代理对)。 另一方面,UTF-8对于文本文件和networking协议是非常好的,因为不存在BE / LE问题,空终止常常派上用场,而且兼容ASCII。

文章标题:Java为什么使用UTF-16而不是更节省内存的UTF-8,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37293

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编的头像小编
上一篇 2023年2月7日 下午5:12
下一篇 2023年2月7日 下午5:58

相关推荐

  • 零成本项目管理:10款合适的免费软件推荐

    国内外主流的10款免费项目管理工具对比:PingCode、Worktile、Jira 、Wrike 、ClickUp、Trello、Asana、飞书、Tapd、Teambition。 在选择项目管理软件时,许多团队面临的最大挑战之一是成本。尤其是对于初创公司或小型企业来说,高昂的软件订阅费可能是一个…

    2024年8月8日
    300
  • 项目的什么不包含管理储备

    项目的成本计划、风险应对策略、进度计划以及范围描述是不包含管理储备的。在项目管理中,管理储备是为了应对项目中无法预见的风险而设立的一种预算,它不包含在项目的初步预算中,也不包含在项目的成本基准中。这是因为管理储备的使用需要得到高层管理人员的批准,因此,它并不属于项目经理可以自由支配的资源。在具体实施…

    2024年8月7日
    800
  • 项目管理目标 ci目标是什么

    在项目管理中,CI目标是指持续集成目标,这是一种软件开发实践,它要求团队频繁地将代码集成到一个共享的主线中。CI目标主要包括:减少集成问题、提高软件质量、加速软件发布。 持续集成通过自动化的构建和测试,可以发现并修复集成问题,从而避免了“集成地狱”的情况。这有利于提高团队的效率,减少重复的工作,帮助…

    2024年8月7日
    500
  • 文化项目运行管理是什么

    文化项目运行管理包括:项目规划、资源配置、进度控制、成本管理、风险管理。项目规划是文化项目运行管理中最为关键的一环。它不仅涉及到项目的总体目标、阶段性目标和具体任务的明确,还包括对项目时间表、资源分配及预算的详细安排。一个科学的项目规划可以有效地指导项目的实施,确保项目按计划进行,避免资源浪费和时间…

    2024年8月7日
    300
  • 新加坡项目管理模式是什么

    新加坡的项目管理模式是一种以结果为导向,注重团队协作的管理方式。这种模式的主要特点包括:以项目为中心,明确项目目标和预期成果;强调团队之间的沟通和协作,确保项目的顺利进行;关注风险管理,提前预防和解决可能出现的问题;重视质量管理,保证项目成果的质量和效益。其中,以项目为中心,明确项目目标和预期成果是…

    2024年8月7日
    500

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部