【问题标题】:JSoup encoding issue with numeric character references数字字符引用的 JSoup 编码问题
【发布时间】:2012-10-04 09:41:38
【问题描述】:

我们正在做以下事情:

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

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

这很好用,除非有numeric character references,例如 。似乎正在发生的事情是,由于我们必须在弄清楚编码之后进行 JSoup 调用(以使 CSV 解析工作),当 JSoup 开始将硬编码字节转换为字符时,我们正在工作使用错误的字符集。字节 160 (0xa0) 是 windows-1252 中的不间断空格,但不是有效的 Unicode 字符,因此当 JSoup 将数字字符引用替换为字节时,会给我们带来错误的数据。

有没有办法解决这个问题?它需要为 JSoup 提供数字字符引用的“源编码”或类似的东西。

【问题讨论】:

    标签: java character-encoding jsoup


    【解决方案1】:

    尝试在text()之前调用以下代码:

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

    更多输出设置见javadoc

    【讨论】:

    • 原来我很困惑——问题出在别的地方。不过,这听起来像是对原始问题的正确答案。关于 API 的一个问题 - 这实际上不是 output 设置,而是 input 编码的问题,对吧?
    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2013-04-21
    相关资源
    最近更新 更多