首页 > 解决方案 > 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 页面如何正确显示?他们是否明确处理?

标签: javacharacter-encodinghtml-parsingtransformerillegal-characters

解决方案


无论您如何在文档中将其表示为字符,在 HTML 中都是非法的。

好像有人在考验你。GUI 不应该允许它,或者您必须忍受无法在 HTML 中显示它。如果您只是需要显示它,则可以将其转换为图像。遗憾的是,[HOP] 没有对应的控制画面


推荐阅读