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款优选

    本文介绍了以下工具:合思、明道云、SAP Concur、管家婆、Spendesk、用友U8、Yokoy、金蝶K/3、Zoho Expense、AIrbase。 许多企业在繁琐的报销流程中消耗了大量人力和时间,效率低下,数据不准确,财务人员和员工都苦不堪言。本文整理了2024年最值得推荐的10款费用…

    2024年7月21日
    100
  • 差旅报销平台推荐:9款专业工具

    本文将介绍9款差旅报销平台:合思、Expensify、用友U8、TravelPerk、SAP Concur、金蝶K/3、Navan、管家婆、Happay。 差旅报销一直是企业管理中的一个大难题。繁琐的流程、复杂的审批、频繁的错误和时间浪费,这些都让财务和员工头疼不已。本文将介绍2024年最靠谱的9款…

    2024年7月21日
    000
  •  10款主流报销系统推荐:企业选型必看指南

    本文将介绍10款国内外报销系统:合思、Concur、用友U8、明道云、Zoho Expense、Expensify、Spendesk、NetSuite、Emburse Chrome River、AIrbase。 在选择报销系统时,很多企业常常面临一个棘手的问题:市场上有太多选择,如何才能找到最适合自…

    2024年7月20日
    200
  • 企业必备的9款财务报销管理软件

    本文将介绍9款财务报销系统:合思、Concur、用友U8、金蝶云星空、明道云、管家婆、Zoho Expense、简道云、Spendesk。

    2024年7月20日
    000
  • 企业工时记录软件的10大选择

    国内外主流的10款工时计算软件对比:PingCode、Worktile、Tita、易企秀、奇鱼、Teambition、Timely、Toggl Track、RescueTime、ClickUp。 在忙碌的工作中,记录和管理工时常常是令人头疼的问题。工时记录软件的选择不仅能帮你省时省力,还能大幅提高团…

    2024年7月19日
    800

发表回复

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

400-800-1024

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

分享本页
返回顶部