java - SERE0014:非法 HTML 字符 - 解析控制字符时出现十进制 129 异常
问题描述
最近在一个案例中,我发现了一个包含控制字符的字符串,我们将其保存到数据库中并尝试从中创建一个 xml 和一个 HTML 文件。它已正确保存在数据库中,并在不同位置显示如下。
1)当查询到数据库时,它显示名称为。
2)当我在记事本++(UTF-8 编码)上复制它时,它显示为.
3) 在 Eclipse IDE 中,调试模式显示和 DB 一样。
4) 在 HTML 页面 (apache/tomcat) 的表记录中以及控制台中的 sysout 输出显示为 simple ,我认为这是更可取的预期输出。
我能够创建包含一些垃圾字符的 XML 文件,但是当我尝试使用带有 UTF-8 编码的 javax TransformerFactory 创建 HTML 时。
transformer.transform(source, result);
抛出异常“非法 HTML 字符 - 十进制 129”。
我知道字符串中有一些 UTF-8 不支持的控制字符,因此解析器抛出了这个异常。
我在这里找到了它的参考资料:
https ://www.fileformat.info/info/unicode/char/0081/index.htm
为了解决它,我尝试了很多方法,但结果接近预期的方法是在将字符串提供给解析器之前手动解析字符串并将其更改为 UTF-8 字符串,如下所示:
String str = new String(nodeValue.getBytes(StandardCharsets.US_ASCII), StandardCharsets.UTF_8);
str = str.replaceAll("[^\p{ASCII}]", "");
这在一定程度上解决了这个问题,但我认为解析整个内容不宜从字符串中删除 1 个控制字符,这也是将名称转换为不可取的名称,我实际上希望它没有任何变化。
是否有任何标准方法可以做到这一点,以便我们可以在解析的 HTML 中获得正确的输出?
sysout 和 apache tomcat 的 HTML 页面如何正确显示?他们是否明确处理?
解决方案

无论您如何在文档中将其表示为字符,在 HTML 中都是非法的。
好像有人在考验你。GUI 不应该允许它,或者您必须忍受无法在 HTML 中显示它。如果您只是需要显示它,则可以将其转换为图像。遗憾的是,[HOP] 没有对应的控制画面。
推荐阅读
- testing - 测试后清理数据
- java - 正在写入时无法从服务器读取
- javascript - 减少 Bootstrap 4 Card Z-index 小于 table thead
- c# - 使用linq将列表结果转换为数据表?
- c++-cli - c++ cli 跟踪引用错误
- reactjs - 如何使用 JEST 在 React 中测试以下组件
- xslt - 根据子元素过滤记录
- python-3.x - EDAMUserException(错误代码=2,参数='Note.guid')
- oracle - Hibernate CriteriaQuery,基于时间戳获取
- tensorflow - 从源代码构建的tensorflow在darwin(OS X)上得到-no-as-needed错误