我正在开发一个基于Java的Android应用程序,该应用程序使用自定义web字体来显示不同的图标。为了使用图标,我创建了一个简单的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字符。
BTW:使用"u005c"
和"u0022"
在Kotlin是没有问题的,并提供正确的结果。
u
在java中不是字符串转义。它是由解析器本身直接拾取的转义。
String x = u0022Hellou0022;
原因相当简单:有时,您编辑源文件,例如US-ASCII或ISO-8859-1,但您仍然希望在源文件中放置(例如)unicode雪人,这将是不可能的。
要在java字符串中放入反斜杠,"\"
是您所需要的。对于一个报价,"""
是所有你需要的。如果出于某种奇怪的原因坚持使用这个数字,可以使用八进制转义,但不能超过255(因此您可以使用这些转义来覆盖ascii和bit)。否则,构建它们。很容易。因此,要么:
put("delete", """);
或
put("delete", "" + (char) 0x5C);
Kotlin做了一个不同的决定,或多或少假设你用UTF-8编辑你的源文件,句号。Java做出了这样的决定:这是一座桥,太远了,不能颁布法令。这可能与java的起源比kotlin早25年有关。那时,UTF-8是一个非常酷的想法,而不是事实上的标准。
这似乎是之前的解释
Map<String, String> testMap = new HashMap<String, String>()
{
{
put("help", "ue004");
put("info", "ue005");
put("search", "u005cu0022");
put("delete", "u005cu005c");
};
};
testMap.entrySet().forEach(
entry -> {
System.out.println(entry.getKey() + entry.getValue());
}
);