StringEscapeUtils escapeJava 正在转义井号

StringEscapeUtils escapeJava is escaping pound signs

我正在尝试对字符串进行转义以确保转义特殊字符。

使用

StringEscapeUtils.escapeJava("")  escapes to \uD83D\uDE00

StringEscapeUtils.escapeJava("% ! @ $ ^ & * ") doesn't escape any of the characters

StringEscapeUtils.escapeJava("£") escapes to \u00A3

我能理解表情符号包含反斜杠,因此会被转义,但为什么井号会被转义,我该如何阻止它被转义?

StringEscapeUtils.escapeJava() 的文档对 "Java String rules" 到底是什么含糊不清。

我猜它指的是 JLS Chapter 3 中的位:

Programs are written in Unicode (§3.1), but lexical translations are provided (§3.2) so that Unicode escapes (§3.3) can be used to include any Unicode character using only ASCII characters.

ASCII (ANSI X3.4) is the American Standard Code for Information Interchange. The first 128 characters of the Unicode UTF-16 encoding are the ASCII characters.

所以这可能意味着 转义字符串,以便仅使用 ASCII 字符编写它

%!@$^&*都是ASCII字符.它们的值小于 128(即它们在 7 位块中)。

£ 不是 ASCII 字符:在 ISO8859-1 中,它被编码为 163 (0xA3),在 7 位 ASCII 块之外。

如果您在字符串文字中打开一个带有 £ 的文件,如果该编辑器没有正确设置字符编码,它可能会呈现为其他内容。例如,如果在 ISO8859-2 中解释它,它可能是 Ł

为了明确起见,所以把井号转义了。

how do I stop it from being escaped

你不能,用这个方法;你需要找到一个替代方案。您唯一可以做的就是再次将字符串中的 \u00A7 替换为 £