如何在 Java 字符串中编码 unicode 字符,如 \u0022 和 \u005c(\ 和 ""),如何编码 unicode 字符?



我正在开发一个基于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 stringu005c '(六个字符长)…

那么,如何正确转义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());
}
);

相关内容

  • 没有找到相关文章

最新更新