带有数字字符引用的JSoup编码问题

时间:2012-10-04 09:41:38

标签: java character-encoding jsoup

我们正在做以下事情:

  1. 使用指定的编码打开文件的阅读器。
  2. 读入每一行,将其解析为CSV。
  3. 对于CSV数据中的某些列,将其传递给JSoup以清除HTML,如下所示:

    public String apply(@Nullable String input) {
        Document document = Jsoup.parse(input);
    
        return document.text();
    }
    
  4. 除非numeric character references存在,例如 ,否则效果很好。似乎正在发生的事情是,因为我们必须在我们弄清楚编码后才能进行JSoup调用(以使CSV解析工作),当JSoup转向将硬编码字节转换为字符时,我们正在工作字符集错误。字节160(0xa0)是windows-1252中的不间断空格,但不是有效的Unicode字符,因此当JSoup用字节替换数字字符引用时,会给我们提供错误的数据。

    有解决方法吗?它需要为JSoup提供数字字符引用的“源代码编码”,或类似的东西。

1 个答案:

答案 0 :(得分:0)

尝试在text()之前调用以下内容:

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

有关更多输出设置,请参阅javadoc