2012-10-04 34 views
2

我们做以下几点:与数字字符编码JSoup引用问题

  1. 打开的Reader文件,使用一些指定的编码。
  2. 在每一行中阅读,将其解析为CSV。
  3. 对于一些在CSV数据列,把它传递给JSoup到如下清理HTML:

    public String apply(@Nullable String input) { 
        Document document = Jsoup.parse(input); 
    
        return document.text(); 
    } 
    

这个伟大的工程,除了在numeric character references存在,如 。看起来发生的事情是,因为在我们找出编码(为了使CSV解析工作)之后我们必须做JSoup调用,当JSoup转而将硬编码的字节转换成字符时,我们正在工作与错误的字符集。 Byte 160(0xa0)在windows-1252中是非破坏性的空间,但不是有效的Unicode字符,所以当JSoup用一个字节替换数字字符引用时,给我们提供了不好的数据。

有没有办法解决?这将需要JSoup被赋予数字字符引用的“源编码”,或类似的东西。

回答

0

尝试调用text()之前如下:

document.outputSettings().charset("windows-1252"); 

对于多个输出设置见javadoc

+0

原来我很困惑 - 问题是别的。不过,这听起来像是对原始问题的正确答案。关于API的一个问题 - 这实际上不是*输出*设置,它是* input *编码的问题,对吧? –