java - UTF-8 和 ISO-8859-1 不适用于 Java 中的欧洲字符集解码

标签 java string utf-8 character-encoding iso-8859-1

您好,我有一个 HTML 页面,我正在从中抓取数据。该页面使用UTF-8字符集并包含德语和其他欧洲字母

<meta charset="utf-8">

但是当我尝试在 Java 中将其解码为 ISO-8859-1UTF-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/

相关文章:

PHP utf8/unicode 编码

java - 在构造函数中尝试/捕获 - 推荐做法?

java - Guava Collection : limit permutation size

java - 是否可以使用字符串内容作为绘画的图像修饰符?

php - 我想在 PHP 中比较两个逗号分隔的字符串,并只保留两者中出现的值

php - 使用 UTF-8 排序规则的 phpMyAdmin 中的拉丁字符

java - 如何在没有ListActivity的情况下创建ListView

java - Maven Java 编译太慢

swift - 循环遍历源代码中的多个实例?

php - 如何将特殊字符以UTF-8格式存储在数据库中