有没有理由比UTF-8更喜欢UTF-16?

问题描述 投票:28回答:7

检查UTF-16和UTF-8的属性,我找不到任何理由偏爱UTF-16。

但是,签出Java和C#,看起来那里的字符串和字符默认为UTF-16。我以为这可能是出于历史原因,或者出于性能原因,但找不到任何信息。

谁都知道为什么这些语言选择了UTF-16?我也有任何正当理由这样做吗?

编辑:同时,我还发现了this answer,它似乎很有意义,并且具有一些有趣的链接。

c# java unicode utf-8 utf-16
7个回答
32
投票

与UTF-8(通常需要3个字节)相比,东亚语言通常需要较少的UTF-16存储空间(2个字节足以存储99%的东亚语言字符)。]

当然,对于西方的lanagues,UTF-8通常较小(1个字节而不是2个字节)。对于HTML之类的混合文件(其中有很多标记),它的功能很多。

为用户模式应用程序处理UTF-16比处理UTF-8容易[[略]

,因为代理对的行为几乎与组合字符的行为相同。因此,通常可以将UTF-16作为固定大小的编码进行处理。

10
投票
@@ Oak:太久了,无法发表评论...

7
投票
我想Windows NT在内部使用UTF-16的主要原因有两个:

3
投票
而且,出于效率考虑,在对字符串建立索引时,Java和C#不会考虑代理对。当使用由占用奇数个字节的UTF-8序列表示的代码点时,这将完全崩溃。

3
投票
most字符可以用一个16位字表示。一些很少使用的字符可能需要两个16位字。 UTF-8通常在表示西欧字符集中的字符方面效率更高-UTF-8和ASCII在ASCII范围内(0-127)是等效的-但对于亚洲语言而言效率较低,需要三个或四个字节来表示字符可以用UTF-16中的两个字节表示。

2
投票
因此您避免了像UTF-8这样的可变长度编码的所有复杂性。

2
投票
为简单起见或提高效率:如果在编辑器应用程序中正确实现Unicode,复杂度将相似,因为UTF-16始终不会始终将代码点编码为单个数字,并且单个代码点通常不是分割文本的正确方法。
© www.soinside.com 2019 - 2024. All rights reserved.