Vin*_*lam 5 java string replace character-encoding backslash
我有一个字符串“ \\ u003c”,它属于UTF-8字符集。由于存在双反斜杠,因此我无法将其解码为unicode。如何从“ \\ u003c”获取“ \ u003c”?我正在使用Java。
我尝试过
myString.replace("\\\\", "\\");
Run Code Online (Sandbox Code Playgroud)
但无法实现我想要的。
这是我的代码
String myString = FileUtils.readFileToString(file);
String a = myString.replace("\\\\", "\\");
byte[] utf8 = a.getBytes();
// Convert from UTF-8 to Unicode
a = new String(utf8, "UTF-8");
System.out.println("Converted string is:"+a);
Run Code Online (Sandbox Code Playgroud)
文件的内容是
\ u003c
您可以使用String#replaceAll:
String str = "\\\\u003c";
str= str.replaceAll("\\\\\\\\", "\\\\");
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)
看起来很奇怪,因为第一个参数是定义正则表达式的字符串,并且\在字符串文字和正则表达式中都是特殊字符。要实际将a \放入搜索字符串中,我们需要\\在文字中对其进行转义()。但实际上把一个\在正则表达式,我们在正则表达式水平逃脱它也。因此,要从字面上获取\\字符串,我们需要\\\\在字符串文字中写入;并为\\正则表达式引擎提供两个文字,我们还需要对它们进行转义,因此最终得到\\\\\\\\。那是:
正则表达式的字符串文字字符串含义 ???????????????????????? ?????????????????????????????? ????????????????? \转义下一个字符将取决于下一个字符 \\ \转义下一个字符 \\\\ \\文字\ \\\\\\\\ \\\\文字\\
在更换参数,即使它不是一个正则表达式,它仍然对待\和$特殊-所以我们要逃避他们在更换为好。因此,要在替换中获得一个反斜杠,我们在该字符串文字中需要四个反斜杠。
不确定您是否仍在寻找问题的解决方案(因为您已经接受了答案),但我仍然会添加我的答案作为上述问题的可能解决方案:
String str = "\\u003c";
Matcher m = Pattern.compile("(?i)\\\\u([\\da-f]{4})").matcher(str);
if (m.find()) {
String a = String.valueOf((char) Integer.parseInt(m.group(1), 16));
System.out.printf("Unicode String is: [%s]%n", a);
}
Run Code Online (Sandbox Code Playgroud)
Unicode String is: [<]
Run Code Online (Sandbox Code Playgroud)
Here is online demo of the above code
| 归档时间: |
|
| 查看次数: |
16104 次 |
| 最近记录: |