在表示字符文字时使用\ u和\ x有什么区别

Arn*_*Das 16 c#

我在某些地方看到\u\x互换使用,同时代表一个字符文字.

例如,'\u00A9' == '\x00A9'评估为true

我们不应该仅\u用于表示unicode字符吗?有两种表示角色的方法有什么用?

Jon*_*eet 30

强烈建议只使用\u,因为它更不容易出错.

\x消耗1-4个字符,只要它们是十六进制数字 - 但\u必须始终跟随4个十六进制数字.从C#5规范,第2.4.4.4节,语法\x:

十六进制转义序列:
  \x 十六位 进制数字的选择 十六进制数字的选择 十六进制数字的选择

例如:

string good = "Tab\x9Good compiler";
string bad =  "Tab\x9Bad compiler";
Run Code Online (Sandbox Code Playgroud)

...看起来很相似,但字符串非常不同,因为后者实际上是"Tab",U+9BAD后跟"编译器".

我个人希望C#语言从未包含在内\x,但我们去了.

请注意,还有\U,后面总是有8个十六进制数字,主要用于非BMP字符.

\u和之间还有另一个很大的区别\x:后者用于字符和字符串文字,而\u也可用于标识符:

string x = "just a normal string";
Console.WriteLine(\u0078); // Still refers to the identifier x
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 Jon,在标识符中使用 \u 对我来说是新的:) (2认同)
  • @vulcanraven:不,因为我会无条件地寻找“\u 之后的四个字符”。然而很容易看到“啊,\x9 - 这意味着制表符;现在,制表符后面是什么?” 一切都取决于结果有多明显。 (2认同)