目前,我们正在使用StringEscapeUtils.escapeEcmaScript
来转义任何引号和制表符等,它适用于英语,但当涉及到日语时,它将所有日语字符编码为unicode,需要关于如何在转义所有特殊字符(引号,制表符等)的同时保持日语字符的建议。
示例:
System.out.println(StringEscapeUtils.escapeEcmaScript("Price must be between 1 and 3"));
System.out.println(StringEscapeUtils.escapeEcmaScript("で本を販売して 70% のロイヤリティを得るに"));
System.out.println(StringEscapeUtils.escapeEcmaScript("Der Preis muss zwischen angewendet werden kann."));
输出:
Price must be between 1 and 3
\u3067\u672C\u3092\u8CA9\u58F2\u3057\u3066 70% \u306E\u30ED\u30A4\u30E4\u30EA\u30C6\u30A3\u3092\u5F97\u308B\u306B
Der Preis muss zwischen angewendet werden kann.
看起来它只在日语中失败
发布于 2021-05-22 00:45:48
StringEscapeUtils.escapeEcmaScript always escapes characters outside of U+0020
-U+007F
.
如果您不想转义日语字符,则必须仅将字符串中的ASCII字符传递给StringEscapeUtils.escapeEcmaScript()
。
package org.example;
import java.util.Arrays;
import org.apache.commons.text.StringEscapeUtils;
public class Test {
public static void main(String[] args) {
System.out.println(escapeEcmaScript("Price must be between 1 and 3"));
System.out.println(escapeEcmaScript("で本を販売して 70% のロイヤリティを得るに"));
System.out.println(escapeEcmaScript("Der Preis muss zwischen angewendet werden kann."));
System.out.println(escapeEcmaScript("1'2\"/3"));
}
public static String escapeEcmaScript(String str) {
return Arrays.stream(str.split("")).map(s -> escapeCharacter(s)).collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();
}
public static String escapeCharacter(String str) {
if (str.matches("\\p{ASCII}")) {
return StringEscapeUtils.escapeEcmaScript(str);
} else {
return str;
}
}
}
您将得到如下结果:
Price must be between 1 and 3
で本を販売して 70% のロイヤリティを得るに
Der Preis muss zwischen angewendet werden kann.
1\'2\"\/3
https://stackoverflow.com/questions/44958443
复制相似问题