Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 “相反的世界”;XML分析错误:格式不正确";错误_Java_Xml_Tomcat_Character Encoding - Fatal编程技术网

Java “相反的世界”;XML分析错误:格式不正确";错误

Java “相反的世界”;XML分析错误:格式不正确";错误,java,xml,tomcat,character-encoding,Java,Xml,Tomcat,Character Encoding,我知道“XML解析错误:格式不好”的广义含义。不知何故,文本不符合xml规范。这通常意味着存在不匹配的标记,或者可能存在写入错误的标题 但是,也存在格式不正确文档的字符编码类型。我得到的结果似乎与我预期的相反 当我从windows 7机器上的浏览器向windows 7机器上的tomcat实例调用java rest服务时,我会返回一个xml文档,其中包含以下单词作为文本,如下所示: <foo>RÃœCK</foo> RÃœCK 我知道这就是我得到的,因为我使用curl保

我知道“XML解析错误:格式不好”的广义含义。不知何故,文本不符合xml规范。这通常意味着存在不匹配的标记,或者可能存在写入错误的标题

但是,也存在格式不正确文档的字符编码类型。我得到的结果似乎与我预期的相反

当我从windows 7机器上的浏览器向windows 7机器上的tomcat实例调用java rest服务时,我会返回一个xml文档,其中包含以下单词作为文本,如下所示:

<foo>RÃœCK</foo>
RÃœCK
我知道这就是我得到的,因为我使用curl保存结果,而这正是文档中的内容。然而,当在firefox、ie8或chrome中查看时,文本的“Ãœ”部分实际上显示为U,上面有2个点。而且,没有浏览器抱怨文档格式不好

然后,我调用相同的rest服务,只是从Windows7机器调用运行tomcat的linux机器。我得到的是:

<foo>RÜCK</foo>
RÜCK
这就是我使用curl下载结果时看到的结果。然而,firefox和ie都抱怨xml文档格式不好

我知道,当我复制粘贴“Ãœ”时,由于文档编码或其他原因,它从一个字符变为两个字符。但是,下面是一件令人困惑的事情

当我更新数据库中的内容以存储“RÃœCK”作为复制粘贴值时,从windows上的tomcat发送时,它显示为“RÃœCK”,但从linux上的tomcat发送时,它给出了一个格式不正确的错误!为什么?


有人能解释到底是什么导致windows和linux系统以不同的方式显示相同的数据,以及为什么它与linux tomcat服务器的格式不一致,而与windows 7 tomcat服务器的格式一致吗?

XML 1.0规范在4.3.3 s中定义,如果确定了XML实体,则这是一个致命错误(通过默认、编码声明或更高级别的协议)处于特定的编码中,但包含在该编码中不合法的字节序列”。它还说,违反良好格式约束是致命错误,这显然也意味着在另一个方向上起作用


因此,显然您的XML文档实际上是UTF-8编码的,但声明(或暗示)为ISO-8859-1(或windows-1252),反之亦然。无论哪种方式,都会有字节或字节组合必须被识别为非法。

根据curl,两个服务器的内容类型都是“content-type:text/XML;charset=UTF-8”。此外,在这两种情况下,xml文档的标题都是“”。xml规范还规定解析器可以使用“外部信息”(通常是HTTP标题中的信息)推断文件的编码,并将其优先于XML头中的信息使用。因此,不同环境中的差异可能是不同的解析器在推断未正确声明的编码时有多聪明的问题。@HappyEngineer,“Ãœ”是当您使用UTF-8编码的“Ü”时得到的结果并且字节被错误地解释为windows-1252编码。因此,显然编码信息以某种方式丢失或更改。使用浏览器的开发工具,检查浏览器获得的
内容类型
标题。(这可能不同于其他软件获得的响应标题,因为它取决于请求标题。)