我很惊讶Unicode中有1,114,112个字符,但同时我们可以使用UTF-16(使用16位)来访问所有字符。我的意思是,他们不需要存储32位吗?
我听说它与代理对有关,但我不知道它们究竟是什么。
答案 0 :(得分:2)
Unicode历史上是一个16位代码和字符集(在最初的版本中)。这也是当UCS-2被创建为编码时,通用字符集中的每个字符都是2字节单位。
很快就清楚了(也是由于项目的一些范围变化)16位,因此65536个字符太少无法使用,Unicode被扩展到21位,组织在17个 plane 其中第一个65536字符组成第0个基本多语言平面(BMP)。
同时,BMP中的2048个代码点被搁置为所谓的高和低代理。其中两个代表另一个平面中的角色。这启用了UTF-16,其中每个代码 unit 仍然是两个字节长,一个或两个代码单元(在后一种情况下通过组合高和低代理)将代表单个代码点。同样,有人宣称这些代理人可能不会出现孤立或错误的顺序。代理字符主要是奇怪的(它们构成Unicode中最大的非字符块),但在技术上是从16位到21位Unicode的最简单方法。
无论您听到或想到什么,Unicode都不是历史上最长时间的16位代码,目前没有任何东西需要任何16位代码。但是:
答案 1 :(得分:0)
unicode有不同的编码。 UTF-8和UTF-16都使用一个或多个8或16位blob来表示单个字符,具体取决于任何unicode代码点。
另一方面,wchar_t或16位整数只能代表一些unicode代码点。
http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings
关于代理人对:
http://msdn.microsoft.com/en-us/library/8k5611at.aspx http://www.unicode.org/faq/utf_bom.html#utf16-4