Java HtmlCleaner:不处理扩展的 ascii 字符

Posted

技术标签:

【中文标题】Java HtmlCleaner:不处理扩展的 ascii 字符【英文标题】:Java HtmlCleaner: Does not handle extended ascii characters 【发布时间】:2012-05-24 06:33:54 【问题描述】:

我正在使用 htmlCleaner 清理一个 HTML 文件,其中包含“€”(ascii 十进制 128)、“TM”(ascii 十进制 153)等字符。也就是说,ASCII 扩展表中的字符。

HTMLCleaner 无法处理这些字符并将它们替换为字符 '?' (ASCII 十进制 63)。

我可以在 HTMLCleaner 中设置任何标志来处理这些字符吗?

提前致谢。

编辑: 变量“encoding”是“iso-8859-1”,就像源文件编码一样。

    try 
        System.out.print("Parsing and cleaning:" + fileStr);
        URL url = new File(this.fileStr).toURI().toURL();
        // create an instance of HtmlCleaner
        HtmlCleaner cleaner = new HtmlCleaner();
        // default properties
        CleanerProperties props = cleaner.getProperties();
        // do parsing
        TagNode tagNode = new HtmlCleaner(props).clean(url);
        // serialize to XML file
        new PrettyXmlSerializer(props).writeToFile(tagNode, fileStr,
                encoding);
        System.out.println("Output: " + fileStr);
     catch (MalformedURLException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
    

我刚刚想通了。行:

TagNode tagNode = new HtmlCleaner(props).clean(url);

应该替换为:

TagNode tagNode = new HtmlCleaner(props).clean(url, encoding);

其中 'encoding' 是源 url 的字符集的字符串表示形式。

谢谢!

【问题讨论】:

可能重复:***.com/questions/10299651/… 是的,这是一个类似的问题,我检查了那个问题,但我没有意识到这是一个编码问题。谢谢你,你真的帮了我。 【参考方案1】:

您是否尝试设置charset

【讨论】:

是的,正如您在上面看到的。生成的 HTML 文件与源文件的编码相同。 我只将字符集设置为:new PrettyXmlSerializer(props).writeToFile(tagNode, fileStr, encoding);,但我错过了TagNode tagNode = new HtmlCleaner(props).clean(url, encoding);。现在可以了,谢谢。

以上是关于Java HtmlCleaner:不处理扩展的 ascii 字符的主要内容,如果未能解决你的问题,请参考以下文章

java 读取文件后,怎样判断它的真正的扩展名

HtmlSpanner 使用小结 -- 安卓解析html

Spring繁华的AOP王国---第五讲之应用案例和扩展

如果要在java中使用文件处理一定要使用java.swing包

PHP中的MySQLi扩展学习mysqli的事务与预处理语句

Java Android - 查找文件扩展名