我正在开发一个基于 Java 的 Android 应用程序,它使用自定义 Web 字体来显示不同的图标。为了使用图标,我创建了一个简单的HashMap:
Map<Integer, String> iconMa\xc3\x9f = new HashMap<String, String>() {\n {\n put("help", "\\ue004");\n put("info", "\\ue005");\n ...\n put("search", "\\u0022");\n put("delete", "\\u005c");\n }\n};\nRun Code Online (Sandbox Code Playgroud)\n这工作得很好,除了不可能使用"\\u005c"and 。代表且是。编译器似乎翻译了转义的 unicode 字符,当然它不是有效的字符串。但是,使用\\u005c` (六个字符长)..."\\u0022""\\u0022"""\\u005c"\\"\\""\\\\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
那么,如何正确转义unicode字符呢?
\n当然,我可以通过使用\\and"来解决这个特定问题。但是,我想确保其他字符也不会出现该问题,并且我想知道如何正确转义 unicode 字符。
顺便说一句:在 Kotlin 中使用"\\u005c"and"\\u0022"没有问题,并且可以提供正确的结果。
\u在java中不是字符串转义。这是由解析器本身直接拾取的转义。这是有效的java:
String x = \u0022Hello\u0022;
Run Code Online (Sandbox Code Playgroud)
原因相当简单:有时,您使用 US-ASCII 或 ISO-8859-1 等格式编辑源文件,但您仍然想在源文件中放入 Unicode 雪人等内容,而这是不可能的。
"\\"只需要在 java 字符串中添加一个反斜杠即可。对于报价,"\""这就是您所需要的。如果您出于某种奇怪的原因坚持始终使用该数字,则可以使用八进制转义符,但不要超过 255(因此您可以用这些转义符来覆盖 ASCII 和一点)。否则,构建它们。很容易。因此,要么:
put("delete", "\"");
Run Code Online (Sandbox Code Playgroud)
或者
put("delete", "" + (char) 0x5C);
Run Code Online (Sandbox Code Playgroud)
Kotlin 做出了不同的决定,并且或多或少假设您使用 UTF-8 编辑源文件,就这样。Java 认为它是一座太过遥远的桥梁,无法仅仅颁布这一法令。可能与java的起源比kotlin早大约25年有关。当时 UTF-8 是一个非常酷的想法,而不是事实上的标准。
| 归档时间: |
|
| 查看次数: |
3630 次 |
| 最近记录: |