Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Java字符串中保存HTML实体-非法字符_Java_Html_Html Entities - Fatal编程技术网

无法在Java字符串中保存HTML实体-非法字符

无法在Java字符串中保存HTML实体-非法字符,java,html,html-entities,Java,Html,Html Entities,我无法编译以下内容: String[]UMLAUT#u REPLACEMENTS={{{“\u0022”,“";”},{“\u0021”,“!;”} 我尝试使用\\来转义特殊字符,但没有效果 这是错误代码: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project opk-application-util: Compila

我无法编译以下内容:

String[]UMLAUT#u REPLACEMENTS={{{“\u0022”,“";”},{“\u0021”,“!;”}

我尝试使用\\来转义特殊字符,但没有效果

这是错误代码:

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project opk-application-util: Compilation failure: Compilation failure: 
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/util/SonderZeichenFilter.java:[50,41] '}' expected
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/ch/opk/util/SonderZeichenFilter.java:[50,45] ';' expected
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/ch/opk/util/SonderZeichenFilter.java:[50,46] illegal character: '#'
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/ch/opk/util/SonderZeichenFilter.java:[50,47] ';' expected
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/opk/util/SonderZeichenFilter.java:[50,50] unclosed string literal

在Java Unicode中,转义序列(
\uxxx
)作为字符串文本的一部分进行处理,并在处理字符串文本之前进行处理。因此,当编译器处理
“\u0022”
时,它实际上是在处理字符串文字
,它是一个空字符串文字(两个双引号),后跟另一个字符串文字的开头引号,因此导致错误“unclosed String literal”“因为代码中的双引号数量参差不齐

这是Javadoc格式不正确的一个常见原因(当作者想按字面意思编写
\uxxx
但生成的HTML却包含相应的Unicode字符时),大多数IDE对此也感到困惑(例如
\u0063lass MyClass{}
是有效的Java源代码;
\u0063
=
c

在您的情况下,您可以使用特殊的转义序列
\“
来编写文本
。这也将提高可读性,因为并非每个人都熟悉
”的Unicode代码点。同样地,
\u0021
可以写成
,因为该字符在Java字符串中没有特殊意义。因此,您的代码可以这样编写:

String[]UMLAUT#u REPLACEMENTS={{{“\”,“&{34;”},{“!”,“&{33;”};


如果要在Java字符串中插入文本
\uxxx
,则必须在反斜杠前面加上另一个
\
“\\uxxx”
似乎问题是
“\u0022”
字符串,因为java编译器在代码解析之前将转义序列转换为UTF,而代码解析有时会导致错误

因此,
“\u0022”
必须替换为
“\”

我找到了解决方案

因此,
String[]]UMLAUT_REPLACEMENTS={{{u0022',“";”},{{u0021',“!;”};
不起作用的原因是,在编译时\u0022已经被解释为“while”,这会引发一个错误,因为需要转义“while”

但是如果您转义\u0022,它将不再被识别为字符

然而,还有一个解决方案,我应用了它


顺便说一下,这个解决方案是屏蔽拉丁ascii字母的所有特殊字符,除了非常简单的字符

首先,声明一个字符串数组:

    public String escapeHtml(String input) {

    String escapedHtml = input;

String[][] UMLAUT_REPLACEMENTS =
            {
                    {"\\u0021", "&33"},
                    {"\\u0022", "&#34"},
                    {"\\u0024", "&#36"},
                    {"\\u0025", "&#37"},
                    {"\\u0026", "&#38"},
                    {"\\u0027", "&#39"},
                    {"\\u0028", "&#40"},
};
然后,查找字符以替换为HTML实体,但使用StringEscapeUtils.unescapeJava(输入)来替换unescape\uxxx

    for (int i = 0; i < UMLAUT_REPLACEMENTS.length; i++) {
        String unescapedSign = StringEscapeUtils.unescapeJava(UMLAUT_REPLACEMENTS[i][0]);
        escapedHtml = escapedHtml.replace(unescapedSign, UMLAUT_REPLACEMENTS[i][1]);
    }


    return escapedHtml;


Thank you for your help!!
for(int i=0;i
我想没有必要转义符号和字符是的-这是一个编辑错误。它以这种方式失败:
String[]]UMLAUT\u REPLACEMENTS={{{u0022',“";”},{\u0021',“!;}
Hi!很抱歉,出于编辑原因,我在这里放置了反斜杠-实际上我使用的正是这个代码序列,我在上面得到了这个错误:``String[][]UMLAUT_REPLACEMENTS={{{“\u0022”、“";”}、{\u0021”、“!;}“FrancescoRovetto,谢谢你的澄清。我误解了你的问题,现在已经更新了我的答案。非常感谢!!”UXXXX会删除错误,但是java不可能以Unicode的方式识别它。但是我们接近解决方案:-不幸的是,我们不能使用空白的符号像!”等等。我正在寻找一种能够在字符串数组中使用unicodes的方法…@Francescoroveto你能更详细地描述一下期望的结果吗?请注意,例如
“\u0021”
“!”
在编译类中并且在运行时完全相同,因此如果您只想创建包含
“!”
的字符串,则无需使用unicode转义。如果希望
\u0021
作为字符串的文本值,则需要对其进行转义。只需尝试一下,例如使用
System.out.println(“\\u0021”)是的,实际上Java使用的字符只有问题。然后,例如\u0022抛出一个错误。但我现在找到了一个解决方案,我将在答案中介绍。:-)您是否测试过其他答案是否对您无效?因为您正在执行的是
“\\u0021”
-StringEscapeUtils.unescapeJava(…)->
“!”
->替换。当您可以直接编写
“!”
,忽略
unescapeJava
(除非有其他代码使用
UMLAUT\u替换,此处未显示),这似乎会使事情变得不必要的复杂化。是的,只要源代码仅部署在本地,它就可以工作。unicode只是更节省—如果编码发生了变化,所有字符都会消失。两者都
是ASCII字符,因此我怀疑是否有任何(常用的)编码会弄乱它们。请注意,在Java中,字符串始终是UTF-16,因此除非您讨论的是影响完整源代码(而不仅仅是字符串文字)的编码问题,否则不应该存在任何问题。