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

Unicode UTF-8是否有一个UCS同义词,如UTF-16是UCS-2,UTF-32是UCS-4?,unicode,Unicode,在浏览unicode文档时,我有时会看到术语UTF-16可与UCS-2互换使用,UTF-32和UCS-4也是如此。我想知道UTF-8是否也有一个很酷的昵称,比如UCS-1之类的…没有。它们也不完全一样 UCS-2是ISO10646标准的一种过时编码,现在这一标准基本上是Unicode,但没有关于字符应如何处理的一些规则,Unicode版本1中每个字符有2个八位字节(8位字节)。在1996年之前,这允许它编码所有通用字符集,因此UCS,但它不适用于所有Unicode版本2或更高版本,我们目前使用的

在浏览unicode文档时,我有时会看到术语UTF-16可与UCS-2互换使用,UTF-32和UCS-4也是如此。我想知道UTF-8是否也有一个很酷的昵称,比如UCS-1之类的…

没有。它们也不完全一样

UCS-2是ISO10646标准的一种过时编码,现在这一标准基本上是Unicode,但没有关于字符应如何处理的一些规则,Unicode版本1中每个字符有2个八位字节(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最初由ISO10646定义为一种32位编码,每个字符使用4个八位字节,理论上能够支持高达U+7FFFFF的代码点。最高位永远不会设置为1,以避免在支持无符号32位值不太理想的情况下产生混淆。此后,国际标准化组织表示,ISO10646将永远不会将代码点以不同方式分配给Unicode,因此永远不会高于U+10FFFF

UTF-32是由Unicode联盟定义的,其定义方式与UCS-4基本相同,只是它从一开始就规定了U+10FFFF的限制。因此,虽然这两种方法在理论上曾经有所不同,但未使用过,但现在它们是相同的。但因为它们曾经是不同的,所以说它们是同一事物的不同名称并不完全正确。他们更像是同卵双胞胎,而不是有两个名字的人

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


UTF-8是UTF-8之前,它是X/OPEN的FSS-UTF文件系统安全的UCS转换格式,所以如果你考虑FSS-UTF酷,那么这是一个很酷的昵称。

不,也不完全相同。

UCS-2是ISO10646标准的一种过时编码,现在这一标准基本上是Unicode,但没有关于字符应如何处理的一些规则,Unicode版本1中每个字符有2个八位字节(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最初由ISO10646定义为一种32位编码,每个字符使用4个八位字节,理论上能够支持高达U+7FFFFF的代码点。最高位永远不会设置为1,以避免在支持无符号32位值不太理想的情况下产生混淆。此后,国际标准化组织表示,ISO10646将永远不会将代码点以不同方式分配给Unicode,因此永远不会高于U+10FFFF

UTF-32是由Unicode联盟定义的,其定义方式与UCS-4基本相同,只是它从一开始就规定了U+10FFFF的限制。因此,虽然这两种方法在理论上曾经有所不同,但未使用过,但现在它们是相同的。但因为它们曾经是不同的,所以说它们是同一事物的不同名称并不完全正确。他们更像是同卵双胞胎,而不是有两个名字的人

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


在UTF-8成为UTF-8之前,它是X/Open的FSS-UTF文件系统安全UCS转换格式,所以这是一个很酷的昵称,如果您考虑FSS-UTF酷。

,也值得注意的是,UTF 16和UTF 32可以表示编码形式,在应用程序中表示文本的方式或编码方案在应用程序或计算机之间传输文本的方式。在前一种情况下,字节顺序由硬件或编译器指定,而在后一种情况下,字节顺序并不重要。编码方案要求前导文件签名指定字节顺序,而编码形式禁止这样的字节顺序标记,任何这样的字节序列都必须被视为有效负载的一部分

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


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

还值得注意的是,UTF-16和UTF-32可能表示应用程序内部文本的编码形式或表示应用程序之间传输文本的编码方案或电脑。在前一种情况下,字节顺序由硬件或编译器指定,而在后一种情况下,字节顺序并不重要。编码方案要求前导文件签名指定字节顺序,而编码形式禁止这样的字节顺序标记,任何这样的字节序列都必须被视为有效负载的一部分

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


UTF-16和UTF-32编码方案由UTF-16LE、UTF-16BE、UTF-32LE和UTF-32BE补充,这些编码方案明确禁止前导字节顺序标记,而是要求通过其他方式协商字节顺序。

谁是昵称?FWIW,UTF-16不是UCS-2。UCS-2仅覆盖BMP;UTF-16是一种扩展,它通过添加代理项对来覆盖更高的平面,将空间从16位扩展到21位。UCS-2和UTF-16之间的实际编程区别在于,在UCS-2中,每个代码单元都是一个代码点,因此字符串长度可以工作。这是许多编程语言Java、JavaScript、.NET等程序的基础,这些程序使用UTF-16字符串长度来确定代码点的数量是错误的,或者,如果您愿意,修正了一个有限的数据范围。@ TouBuffDGET,我会考虑UTF 16可以处理1996或更高版本中产生的有效数据,而UCS-2不能保证能够做一个更大的实际的、程序上的差异。谁是昵称?FWIW,UTF-16不是UCS-2。UCS-2仅覆盖BMP;UTF-16是一种扩展,它通过添加代理项对来覆盖更高的平面,将空间从16位扩展到21位。UCS-2和UTF-16之间的实际编程区别在于,在UCS-2中,每个代码单元都是一个代码点,因此字符串长度可以工作。这是许多编程语言Java、JavaScript、.NET等程序的基础,这些程序使用UTF-16字符串长度来确定代码点的数量是错误的,或者,如果您愿意,修正了一个有限的数据范围。@ TouBuffDGET,我会考虑UTF 16可以处理1996或更高版本中产生的有效数据,而UCS-2不能保证能够实现更大的实际的、程序上的差异。