gpt4 book ai didi

java - JSoup 字符编码问题

转载 作者:IT老高 更新时间:2023-10-28 20:43:21 24 4
gpt4 key购买 nike

我正在使用 JSoup 解析来自 http://www.latijnengrieks.com/vertaling.php?id=5368 的内容.这是第三方网站,没有指定正确的编码。我正在使用以下代码来加载数据:

public class Loader {

public static void main(String[] args){
String url = "http://www.latijnengrieks.com/vertaling.php?id=5368";

Document doc;
try {

doc = Jsoup.connect(url).timeout(5000).get();
Element content = doc.select("div.kader").first();
Element contenttableElement = content.getElementsByClass("kopje").first().parent().parent();

String contenttext = content.html();
String tabletext = contenttableElement.html();

contenttext = Jsoup.parse(contenttext).text();
contenttext = contenttext.replace("br2n", "\n");
tabletext = Jsoup.parse(tabletext.replaceAll("(?i)<br[^>]*>", "br2n")).text();
tabletext = tabletext.replace("br2n", "\n");

String text = contenttext.substring(tabletext.length(), contenttext.length());
System.out.println(text);


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

}

这给出了以下输出:

Aeneas dwaalt rond in Troje en zoekt Cre?sa. Cre?sa is echter op de vlucht gestorven Plotseling verschijnt er een schim. Het is de schim van Cre?sa. De schim zegt:'De oorlog woedt!' Troje is ingenomen! Cre?sa is gestorven:'Vlucht!' Aeneas vlucht echter niet. Dan spreekt de schim:'Vlucht! Er staat jou een nieuw vaderland en een nieuw koninkrijk te wachten.' Dan pas gehoorzaamt Aeneas en vlucht.

有什么办法吗?标记可以在输出中再次成为原始(ü)吗?

最佳答案

HTTP 响应 Content-Type header 中缺少 charset 属性。 Jsoup 在解析 HTML 时将使用平台默认字符集。 Document.OutputSettings#charset() 不起作用,因为它仅用于演示(在 html()text() 上),不是为了解析数据(换句话说,已经太晚了)。

您需要将 URL 读取为 InputStream 并在 Jsoup#parse() 方法中手动指定字符集。

String url = "http://www.latijnengrieks.com/vertaling.php?id=5368";
Document document = Jsoup.parse(new URL(url).openStream(), "ISO-8859-1", url);
Element paragraph = document.select("div.kader p").first();

for (Node node : paragraph.childNodes()) {
if (node instanceof TextNode) {
System.out.println(((TextNode) node).text().trim());
}
}

这会导致

Aeneas dwaalt rond in Troje en zoekt Creüsa.
Creüsa is echter op de vlucht gestorven
Plotseling verschijnt er een schim.
Het is de schim van Creüsa.
De schim zegt:'De oorlog woedt!'
Troje is ingenomen!
Creüsa is gestorven:'Vlucht!'
Aeneas vlucht echter niet.
Dan spreekt de schim:'Vlucht! Er staat jou een nieuw vaderland en een nieuw koninkrijk te wachten.'
Dan pas gehoorzaamt Aeneas en vlucht.

关于java - JSoup 字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com