最近,在一种情况下,我发现了一个带有控制字符的字符串,我们将其保存到数据库中,并尝试从中创建xml和HTML文件。它已正确保存在数据库中,并在不同位置显示如下。
1)查询数据库时,名称显示为。
2)当我将其复制到记事本++(UTF-8编码)上时,显示为。
3)在Eclipse IDE中,调试模式将其显示为与DB相同。
4)在HTML页面(apache / tomcat)中的表记录中,控制台中的sysout输出将其显示为简单的,我认为这是更可取的和预期的输出。
我能够创建带有垃圾字符的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页面如何正确显示它?他们会明确处理吗?
答案 0 :(得分:1)

在HTML中是非法的,无论您如何在文档中将其表示为字符。
似乎有人在测试您。 GUI不应允许它,或者您不得不忍受无法以HTML形式显示它。如果只需要显示它,则可以将其转换为图像。不幸的是,[HOP]没有相应的Control Picture。