【发布时间】:2021-06-01 03:26:21
【问题描述】:
我正在开发一个基于 Java 的 Android 应用程序,它使用自定义网络字体来显示不同的图标。为了使用这些图标,我创建了一个简单的HashMap:
Map<Integer, String> iconMaß = new HashMap<String, String>() {
{
put("help", "\ue004");
put("info", "\ue005");
...
put("search", "\u0022");
put("delete", "\u005c");
}
};
这很好用,但不能使用"\u005c" 和"\u0022"。 "\u0022" 代表 " 和 "\u005c" 是 \。似乎编译器翻译了转义的 unicode 字符,"\" 当然不是有效的字符串。但是,使用"\\u005c" does not work either, since now the first backslash escaped the second one and instead of having one unicode character I now get the string \u005c`(六个字符长)...
那么,如何正确转义 unicode 字符?
当然,我可以改用\ 和" 来解决这个特定问题。但是,我想确保问题不会出现在其他字符上,并且我想知道如何正确转义 unicode 字符。
顺便说一句:在 Kotlin 中使用 "\u005c" 和 "\u0022" 没有问题,并且可以提供正确的结果。
【问题讨论】:
-
关于 Java 和 Unicode 的有用帖子:stackoverflow.com/questions/2533097/java-unicode-encoding
-
双引号和反斜杠是唯一在字符串文字中表现特殊的字符。因此,它们的 Unicode 等价物
\u022和\005c是唯一也会表现特殊的 Unicode 转义。所以,问题解决了,我认为 (;-D) -
如果你可以像这样格式化,反斜杠(和其他 unicode 字符)应该打印正确:
int test = 0x005c;System.out.println((char)test);