我试图转义字符串以确保转义特殊字符。
使用
StringEscapeUtils.escapeJava("") escapes to \\uD83D\\uDE00
StringEscapeUtils.escapeJava("% ! @ $ ^ & * ") doesn't escape any of the characters
StringEscapeUtils.escapeJava("£") escapes to \\u00A3
我可以理解,emojis包含反斜杠,因此被转义,但为什么英镑符号被转义,我该如何阻止它被转义?
答案 0 :(得分:3)
StringEscapeUtils.escapeJava()
的文档对“Java String规则”到底是什么含糊不清。
我想它指的是JLS Chapter 3中的位,它表示:
程序是用Unicode(§3.1)编写的,但提供了词法翻译(§3.2),因此Unicode转义(§3.3)可用于包含仅使用ASCII字符的任何Unicode字符。
和
ASCII(ANSI X3.4)是美国信息交换标准码。 Unicode UTF-16编码的前128个字符是ASCII字符。
因此,它可能意味着转义字符串,以便只能使用ASCII字符来编写。
%
,!
,@
,$
,^
,&
和*
都是ASCII字符。它们的值小于128(即它们位于7位块中)。
£
不是ASCII字符:在ISO8859-1中,它被编码为163(0xA3),它位于7位ASCII块之外。
如果在字符串文字中打开带有£
的文件,则该文件可能会呈现为其他内容,如果该编辑器未正确设置字符编码。例如,它可以是Ł
,如果它在ISO8859-2中解释。
为了明确无误,英镑符号因此被转义。
如何阻止它被转义
你不能,使用这种方法;你需要找到另一种选择。您唯一可以做的就是再次用\u00A7
替换字符串中的£
。