您好,我有一个 HTML 页面,我正在从中抓取数据。该页面使用UTF-8字符集并包含德语和其他欧洲字母
<meta charset="utf-8">
但是当我尝试在 Java 中将其解码为 ISO-8859-1
和 UTF-8
时,却没有任何效果。我无法获取欧洲字符,而是得到如下值:
Bayern München
Bor. Mönchengladbach
Jérôme Boateng
以下是我的代码片段:
URL myUrl = new URL("http://www.weltfussball.de/spielplan/bundesliga-"
+ season + "-spieltag/" + gameDay + "/");
in = new BufferedReader(new InputStreamReader(myUrl.openStream(), "ISO-8859-1"));
while ((line = in.readLine()) != null) {
all += line;
}
我注意到的一件事是,当我打印 String line;
时,它会在 java 控制台上正确打印所有拉丁字符,但是一旦我将其连接到 String all;
字符就会困惑......任何人都可以提出解决方案吗?
最佳答案
首先,尝试查看页面是否真的像它假装的那样使用 UTF-8:
final CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder()
.onMalformedInput(CodingErrorAction.REPORT);
try (
final InputStream in = url.openStream();
final Reader reader = new InputStreamReader(in, decoder);
) {
/* read the contents */
}
如果该程序抛出MalformedInputException
,那么您就知道该页面在撒谎。
但是,鉴于您的输出,我怀疑问题是您的显示器无法正确读取 UTF-8。
关于java - UTF-8 和 ISO-8859-1 不适用于 Java 中的欧洲字符集解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28052592/