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 张佳玮
我想知道为什么name
和name2
输出不同的字符串以及如何使name
具有与name2
相同的输出。
答案 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解析器。