如何在 Java 字符串中对 \u0022 和 \u005c(\ 和 ")等 unicode 字符进行编码?
How to encode unicode characters like \u0022 and \u005c (\ and ") in a Java string?
我正在开发基于 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"
没有问题并提供正确的结果。
\u
in java 不是字符串转义。这是一个由解析器本身 直接提取的转义 。这是有效的 java:
String x = \u0022Hello\u0022;
原因很简单:有时,您编辑源文件,例如US-ASCII 或 ISO-8859-1,但您仍然想在源文件中放置一个 unicode 雪人,这是不可能的。
要在 java 字符串中添加反斜杠,只需 "\"
即可。对于报价,"\""
就是您所需要的。如果您出于某种奇怪的原因坚持始终使用该数字,可以使用八进制转义符,但不要超过 255(因此您可以用这些来覆盖 ASCII 和位)。否则,构建它们。很容易。因此,要么:
put("delete", "\"");
或
put("delete", "" + (char) 0x5C);
Kotlin 做出了不同的决定,并或多或少地假定您在 UTF-8 中编辑源文件,句号。 Java 决定它是一座太过分的桥梁,不能仅仅颁布这条法令。可能与 java 的起源比 kotlin 的起源早大约 25 年这一事实有关。当时 UTF-8 是一个很酷的想法,而不是事实上的标准。
这看起来像透水的explaination
这种添加方式也有效
Map<String, String> testMap = new HashMap<String, String>()
{
{
put("help", "\ue004");
put("info", "\ue005");
put("search", "\u005c\u0022");
put("delete", "\u005c\u005c");
};
};
testMap.entrySet().forEach(
entry -> {
System.out.println(entry.getKey() + entry.getValue());
}
);
我正在开发基于 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"
没有问题并提供正确的结果。
\u
in java 不是字符串转义。这是一个由解析器本身 直接提取的转义 。这是有效的 java:
String x = \u0022Hello\u0022;
原因很简单:有时,您编辑源文件,例如US-ASCII 或 ISO-8859-1,但您仍然想在源文件中放置一个 unicode 雪人,这是不可能的。
要在 java 字符串中添加反斜杠,只需 "\"
即可。对于报价,"\""
就是您所需要的。如果您出于某种奇怪的原因坚持始终使用该数字,可以使用八进制转义符,但不要超过 255(因此您可以用这些来覆盖 ASCII 和位)。否则,构建它们。很容易。因此,要么:
put("delete", "\"");
或
put("delete", "" + (char) 0x5C);
Kotlin 做出了不同的决定,并或多或少地假定您在 UTF-8 中编辑源文件,句号。 Java 决定它是一座太过分的桥梁,不能仅仅颁布这条法令。可能与 java 的起源比 kotlin 的起源早大约 25 年这一事实有关。当时 UTF-8 是一个很酷的想法,而不是事实上的标准。
这看起来像透水的explaination
这种添加方式也有效
Map<String, String> testMap = new HashMap<String, String>()
{
{
put("help", "\ue004");
put("info", "\ue005");
put("search", "\u005c\u0022");
put("delete", "\u005c\u005c");
};
};
testMap.entrySet().forEach(
entry -> {
System.out.println(entry.getKey() + entry.getValue());
}
);