我遇到了这个问题:
string str1 = "\U0010FADE";
string str2 = "\U0000FADE";
Console.WriteLine(str1.Length);
Console.WriteLine(str2.Length);
结果显示2和1,这是怎么回事?
我只知道小写字母\u
后跟 4 个十六进制数字。
MSDN \U
没有枚举 char,这是合乎逻辑的——结果显然不是char
.
对于字符串- 有提及,但仍不清楚:
转义码
\udddd
(其中dddd
是一个四位数字)表示 Unicode 字符U+dddd
。八位 Unicode 转义码也可以识别:\Udddddddd
.
在其他地方它说需要它们来形成代理对,但也没有进一步解释:
\Uxxxxxxxx
- 具有十六进制值的字符的 Unicode 转义序列xxxxxxxx
(用于生成代理)
那么它有什么作用\U
,为什么第二行没有代理对,而只有一个字符?
我尝试在 ideone 上运行它,但由于某种原因,显示的符号没有源代码中指示的代码。虽然这可能是ideone本身的门框。
文档中的信息绝对正确。语法
\Udddddddd
只是在字符串常量中包含 Unicode 字符 dddddddd。此字符可以是代理对并跨越两个 UTF-16 代码单元,但它也可以是跨越一个代码单元的常规字符。ECMA-334
第一种情况,码位值大于U+10000,所以用两个码元表示。在第二种情况下 - 少,所以一个。
换句话说,该条目
\U0000FADE
是等价的\uFADE
,而不是\u0000\uFADE
乍一看的(后者实际上由两个代码单元组成)。