问号问题的临时解决方案

       使用ViVa提取网页正文并将结果保存在文件中,发现提取结果总是在每一个段落前发现奇怪的“????”,开始总以为是编码的问题,后来发现引起这个问题的原因居然是HTML中空格的转义 ,怀疑是ViVa使用的HTMLParser上,后来Forest发现使用其他的HTMLParser也会有这个问题。到底问题在哪里?其实这个问题很简单,先要看一下普通HTMLParser是如何处理HTML文档的。

HTML -> HTML Tag 补全 -> XML Parser

  1. HTMLParser处理HTML第一步要对HTML文档进行HTML补全,将HTML文档补全成XML的形式。
  2. 将补全的“xHTML”放到一个XML Parser中进行处理。

      问题就处在了HTML转换成xHTML这一步上,HTML中空格字符的转义是 ,而xHTML中空格字符的转义为 ,使用在XML中使用  XMLParser将验证失败。这样在HTML到xHTML的转换中HTMLParser会将 转换成 ,处理完成便会将 转译成空格。至于为什么输出到文件空格为变成“?”,现在还在探究中...

    目前的解决方案是将HTML文档在进入到HTMLParser前将&nsbp;过滤掉,但是由于ViVa的源代码遗失所以目前的方法是对ViVa处理后的结果进行escapeHtml操作,然后过滤掉 然后再unescapeHtml,再将结果保存在文件中。

回复

CAPTCHA
回答问题
Copy the characters (respecting upper/lower case) from the image.