Java 奇怪的unicode字符导致XML解析失败

Java 奇怪的unicode字符导致XML解析失败,java,xml,unicode,character-encoding,flying-saucer,Java,Xml,Unicode,Character Encoding,Flying Saucer,提交“我的应用”中的表单时,它会(在客户端)转换为如下所示的HTML字符串: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xml:lang="en" lang="en" xmlns="http://www

提交“我的应用”中的表单时,它会(在客户端)转换为如下所示的HTML字符串:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head> 
  <style type="text/css">
    td { white-space: normal; }
  </style>
</head>
<body>
<table>
    <tbody>
    <!-- Repeat for every field in the form -->
    <tr>
        <td>Name</td>
        <td>John Doe</td>
    </tr>
    </tbody>
</table>
</body>
</html>
在浏览器中,它看起来像“h5”和“9gx”,由几个空格分隔,但它们绝对不是空格

在服务器上检查时值的显示方式 原始HTML值

<td>h5&#8194;&#11;&#8233;&#8201;&#8233;&#8194;&#8200;&#11;9gx</td>
h5 
 
  9gx
在规范化/清理HTML之后,看起来原始HTML中的XML实体已转换为空格,但同样,它们肯定不是空格

不管它们是什么,它们都会导致XML解析器抛出此异常

SAXParseException;在文档的元素内容中发现无效的XML字符(Unicode:0xb)

如何在客户端或服务器端安全地删除/替换/清理/编码这些值?

0xb
(又称垂直选项卡)不是一个

因此,您的数据不是XML,任何符合XML的处理器都必须报告一个错误,例如您收到的错误

在将数据与任何XML库一起使用之前,必须手动或自动将其视为文本而不是XML,通过删除任何非法字符来修复数据

另见:

  • Java
  • JavaScript
0xb
(又称垂直选项卡)不是一个

因此,您的数据不是XML,任何符合XML的处理器都必须报告一个错误,例如您收到的错误

在将数据与任何XML库一起使用之前,必须手动或自动将其视为文本而不是XML,通过删除任何非法字符来修复数据

另见:

  • Java
  • JavaScript

感谢您的回答,您对我如何使用客户端的JS/Angular或服务器上的任何Java库进行此操作有何建议?@Dónal:answer更新了其他Q/As的链接,显示了如何通过Java或JavaScript从字符串中过滤非法XML字符。感谢您的回答,您对我如何使用客户端的JS/Angular或服务器上的任何Java库来实现这一点有什么建议吗?@Dónal:Answer更新了指向其他Q/A的链接,显示了如何通过Java或JavaScript从字符串中过滤非法XML字符。
<td>h5&#8194;&#11;&#8233;&#8201;&#8233;&#8194;&#8200;&#11;9gx</td>
[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]