在浏览unicode文档时,我有时会看到UTF-16这个术语可以与UCS-2互换使用,而在UTF-32和UCS-4中也是一样的。我想知道UTF-8是否也有一个很酷的绰号像UCS-1之类的.
发布于 2018-01-13 02:29:21
不是的。它们也不完全一样。
UCS-2是ISO 10646的一种过时的编码(现在这个标准基本上是Unicode,但没有关于如何处理字符的一些规则)和Unicode版本1,每个字符有两个八位字节(8位字节)。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以下的代码点(为了避免对无符号32位值的支持不是很好),最高位永远不会设置为1。从那时起,国际标准化组织就指出,ISO 10646绝不会以不同的方式将代码点分配给Unicode,因此永远不会高于U+10FFFF。
Unicode联盟对UTF-32的定义与UCS-4的定义大致相同,但它从一开始就有U+10FFFF的规定限制。因此,虽然两者曾经在理论(但未使用)限制上存在差异,但现在它们是一样的。但是,因为它们曾经不同,所以说它们是同一事物的不同名称是不完全正确的。(他们更像是同卵双胞胎,而不是有两个名字的人)。
根据代码点的不同,UTF-8每个字符使用1、2、3或4个八位数。它是在ISO 10646和Unicode在最大可能的代码点上存在差异的时候开发的,并打算与这两种代码一起使用,同时与ASCII/ISO 646的8位编码保持向后兼容。因此,它最初也可以有5或6个八进制来支持U+110000到U+7FFFFFFF的范围,而ISO 10646所支持的范围,但Unicode不支持。由于U+10FFFF现在是两者的最大值,所以这5个和6个八进制组合不再被它所允许。
在UTF-8成为UTF-8之前,它是X/Open的FSS(“文件系统安全UCS转换格式”),所以如果您考虑FSS“酷”,那就算是“一个很酷的昵称”。
发布于 2019-01-22 18:14:29
还值得注意的是,"UTF-16“和"UTF-32”可以表示编码形式(在应用程序中表示文本的方式)或编码方案(在应用程序或计算机之间传输文本的方式)。在前一种情况下,字节顺序是未指定的(由硬件或编译器指定),而在后一种情况下,字节顺序确实很重要。编码方案要求一个前导文件签名来指定字节顺序,而编码形式禁止这样的字节顺序标记(任何这样的字节序列都必须被视为“有效负载”的一部分)。
类似的考虑也适用于" UTF-8 ",尽管字节顺序并不重要;在这种情况下,不同之处在于编码方案还允许(但不强制)一个前导签名(“碰巧”匹配对应于UTF-16和UTF-32字节顺序签名的编码点的UTF-8编码)。编码形式明确禁止这样的签名,任何这样的序列都必须被视为“有效载荷”的一部分。
UTF-16和UTF-32编码方案得到UTF-16 be、UTF-16 be、UTF-32 be和UTF-32BE的补充,这些编码方案明确禁止前导字节顺序标记,并要求以其他方式协商字节顺序。
https://stackoverflow.com/questions/48236286
复制相似问题