我正在http://www.joelonsoftware.com/articles/Unicode.html阅读有关unicode的内容。 Joel说UCS-2以2个字节编码所有unicode字符,而UTF-8可能需要多达6个字节来编码一些unicode字符。请您解释一下如何在UCS-2中编码6字节UTF-8编码的unicode字符?
答案 0 :(得分:5)
当Unicode的代码点少于65536时,就会创建UCS-2,因此它们最多可以容纳2个字节。一旦Unicode增长到超过65536个代码点,UCS-2就变得过时,并被UTF-16取代,UTF-8使用2个字节编码所有UCS-2兼容代码点,其余代码通过代理对使用4个字节。
{{3}}最初用于编码最多6个字节(最大U + 7FFFFFFF)的代码点,但后来限制为4个字节(U + 1FFFFF最大值,但禁止高于U + 10FFFF的任何内容),因此它是100%与UTF-16来回兼容,不编码UTF-16不支持的任何代码点。 UTF-8和UTF-16支持的最大代码点是U + 10FFFF。
所以,为了回答你的问题,需要5或6字节UTF-8序列(U + 200000到U + 7FFFFFFF)的代码点不能在UCS-2中编码,或者甚至是UTF-16。没有足够的位来保存如此大的代码点值。
答案 1 :(得分:3)
UCS-2以两个字节存储它可以的所有内容,并且不会对不适合该空间的代码点做任何事情。这就是今天UCS-2几乎没用的原因。
相反,我们有UTF-16,对于所有双字节序列看起来像UCS-2,但也允许代理对,对的双字节序列。使用这些,剩余的代码点可以使用总共4个字节进行编码。