UTF-8是否具有UCS同义词,如UTF-16是UCS-2,UTF-32是UCS-4?

时间:2018-01-13 01:58:24

标签: unicode

在浏览unicode文档时,我有时会看到UTF-16这个术语与UCS-2交替使用,UTF-32和UCS-4也是如此。我想知道UTF-8是否也有像UCS-1这样的酷昵称......

2 个答案:

答案 0 :(得分:9)

没有。它们也不完全一样。

UCS-2是ISO 10646的过时编码(目前这个标准几乎是Unicode,但没有关于如何处理字符的一些规则)和每个2字节(8位字节)的Unicode版本1字符。在1996年之前,它允许它编码所有通用字符集(因此 UCS ),但它不适用于所有Unicode版本2或更高版本(我们目前使用的是版本10)。

UTF-16使用2个八位字节组来编码字符或代理对(因此总共4个八位字节)以编码U + 10000和更高。它向后兼容UCS-2,因此任何可以处理UTF-16的东西都会将UCS-2理解为有效的UTF-16,但是期望UCS-2的旧软件会将代理视为普通字符(它不会理解,因为相关代码点未分配给Unicode版本1中的任何内容。

UCS-4最初由ISO 10646定义为32位编码,每个字符使用4个八位字节,理论上能够支持高达U + 7FFFFFFF的代码点(最高位永远不会被设置为1以避免混淆,对无符号32位值的支持不是很大)。 ISO已经声明ISO 10646永远不会为Unicode分配不同的代码点,因此永远不会超过U + 10FFFF。

UTF-32由Unicode Consortium定义,与UCS-4的定义方式大致相同,只是它从一开始就具有U + 10FFFF的规定限制。因此,尽管两者在理论(但未使用)限制方面曾有所不同,但它们现在是相同的。但是因为它们曾经是不同的,所以说它们是同一个东西的不同名称并不完全正确。 (他们更像是同卵双胞胎而不是有两个名字的人)。

UTF-8每个字符使用1,2,3或4个八位字节,具体取决于代码点。它是在ISO 10646和Unicode在最大可能代码点上有所不同的时候开发的,并且可以与两者一起使用,同时保持向后兼容ASCII / ISO 646的8位编码。因此它最初也可以有5或6八位字节支持ISO 10646支持的U + 110000到U + 7FFFFFFF范围,但Unicode没有。由于U + 10FFFF现在是两者的最大值,因此不再允许这些5和6个八位字节组合。

在UTF-8是UTF-8之前,它是X / Open的FSS-UTF(“文件系统安全UCS转换格式”),所以如果你认为FSS-UTF“酷”,那就是“一个很酷的昵称”

答案 1 :(得分:0)

也许还应注意,“ UTF-16”和“ UTF-32”可能表示编码形式(在应用程序内部表示文本 的方式)或编码方案(在应用程序或计算机之间传输文本的方式)。在前一种情况下,字节顺序是不确定的(由硬件或编译器决定),而在后一种情况下,字节顺序确实很重要。 编码方案强制使用前导文件签名来指定字节顺序,而 encoding形式禁止使用这种字节顺序标记(任何这样的字节序列都必须视为字节顺序的一部分) “有效载荷”)。

类似的考虑也适用于“ UTF-8”,即使字节顺序在此无关紧要;这种情况下的区别在于,编码方案还允许(但不强制要求)前导签名(“发生”以匹配对应于UTF的代码点的UTF-8编码) -16和UTF-32字节顺序签名)。 编码形式明确禁止此类签名,任何此类序列都必须视为“有效载荷”的一部分。

UTF-16和UTF-32 编码方案补充了UTF-16LE,UTF-16BE,UTF-32LE和UTF-32BE,它们是明确禁止前导字节顺序的编码方案标记并要求通过其他方式协商字节顺序。