【问题标题】:Jsoup is encoding ISO-8859-1 text thats on a webpage to another encodingJsoup 正在将网页上的 ISO-8859-1 文本编码为另一种编码
【发布时间】:2023-03-21 17:22:01
【问题描述】:

文本来自网页,并且已经在ISO-8859-1

首先让我给你看一个问题的例子。让我们说这是网页中的一段文字,Mark Helström。当我使用Jsoup 解析页面时,那段文本将变成:Mark Helström

以下是网页代码示例:

<body>
    <p>Mark Helström</p>
</body>

这是我解析网页的代码:

    String url = "http://localhost:8080/translator/test";
    Document doc = Jsoup.connect(url).get();

    System.out.println("charset=" + doc.outputSettings().charset());

    doc.outputSettings().charset(Charset.forName("ISO-8859-1"));

    System.out.println("charset=" + doc.outputSettings().charset());

    for(Element code : doc.select("*")) {
        System.out.println("code=" + code.ownText());               
    } 

这是上面代码生成的输出:

charset=ISO-8859-1
charset=ISO-8859-1
code=
code=
code=
code=
code=Mark Helström

【问题讨论】:

  • 不可能重复。这个方法我试过了,没用。
  • 您能否在您尝试将内容解析为 ISO-8859-1 的位置显示您的代码?您当前拥有的是输出字符集,而不是输入。
  • @ZackTeater 我更新了我的问题,以便它包含您的解决方案。
  • 您能更新示例 html 吗?似乎缺少 5 段。它可能是 ownText() 方法,它只显示元素的文本节点。如果有嵌入元素,则不会显示它。例如,

    foo

    。你可以试试 text() 吗?

标签: jsoup


【解决方案1】:

当我解析这个页面的字符时,似乎工作正常。

    Document doc = Jsoup
            .connect("http://stackoverflow.com/questions/38875180/jsoup-is-encoding-iso-8859-1-text-thats-on-a-webpage-to-another-encoding")
            .get();

    System.out.println("charset=" + doc.outputSettings().charset());

    doc.outputSettings().charset(Charset.forName("ISO-8859-1"));

    System.out.println("charset=" + doc.outputSettings().charset());

    for (Element code : doc.select(".post-text p code:contains(mark)"))
        System.out.println("code=" + code.ownText());

控制台

charset=UTF-8
charset=ISO-8859-1
code=Mark Helström
code=Mark Helström

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2011-02-12
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多