我试图转义一个字符串,以确保特殊字符被转义。
使用
StringEscapeUtils.escapeJava("") escapes to \\uD83D\\uDE00
StringEscapeUtils.escapeJava("% ! @ $ ^ & * ") doesn't escape any of the characters
StringEscapeUtils.escapeJava("£") escapes to \\u00A3我可以理解,表情符号包含反斜杠,因此被转义,但为什么英镑符号要被转义,以及如何阻止它被逃脱?
发布于 2017-01-09 14:05:53
StringEscapeUtils.escapeJava()的文档对于"Java“到底是什么是模糊的。
我猜它指的是JLS第3章中的bit,它说:
程序是用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中解释它,它可能是Ł。
因此,为了明确无误,英镑符号被逃脱了。
我怎样才能阻止它逃脱?
您不能使用这种方法;您需要找到一个替代方法。您唯一能做的就是再次用£替换字符串中的£。
https://stackoverflow.com/questions/41549457
复制相似问题