字符串文字不起作用

时间:2016-04-05 18:43:03

标签: java string encoding utf-8 escaping

String name = ...; //some method
System.out.println(name); //output \u5f20\u4f73\u73ae

String name2 = "\u5f20\u4f73\u73ae"; //looks the same as the output above
System.out.println(name2); \\output 张佳玮

我想知道为什么namename2输出不同的字符串以及如何使name具有与name2相同的输出。

1 个答案:

答案 0 :(得分:2)

如果System.out.println(name)打印出反斜杠后跟u等,则说明字符串中的内容...而在

String name2 = "\u5f20\u4f73\u73ae";

...你已经拥有了Unicode转义序列......那只有3个字符。如果你想要反斜杠,你需要逃避它们:

String name2 = "\\u5f20\\u4f73\\u73ae";

有关Unicode转义序列(可以在源代码中的任何位置)的更多信息,请参阅JLS 3.3;有关字符串和字符文字转义序列的更多信息,请参阅JLS 3.10.6

另一方面 - 如果 一个以\开头的字符串值,然后是u等,则您必须解析它。我不知道常规Java库中有什么东西可以做到这一点(除了通过Properties,这将是非常奇怪的),但我确信有第三方库会

但是,您应该查看数据的来源以及是否应该自己解析它 - 通常使用Unicode转义序列的文本作为JSON的一部分或类似的东西,在这种情况下,您应该使用JSON解析器。