繁体   English   中英

UTF-8和ISO-8859-1无法在Java中解码欧洲字符集

[英]UTF-8 & ISO-8859-1 not working for decoding European charset in Java

嗨,我有一个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;它就会立即输出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。

这始终有效。

InputStream is = getClass().getResourceAsStream(myUrl); byte[] b = new byte[is.available()]; int l = is.read(b); String body = new String(b, 0, l, "UTF-8"); // whatever your charset you want

确保仅读取 “ ISO-8859-1” 否则它将无法正常工作。 我今天遇到了同样的问题,我花了30分钟阅读这篇文章http://www.joelonsoftware.com/articles/Unicode.html ,然后解决了我的问题,现在我知道了解码的内容,为什么人们使用它,为什么这很好,以及他自己的局限性。

为了解决我的问题,我只在标题模板文件中替换了此标记:

meta http-equiv =“ content-type” content =“ text / html; charset = UTF-8”

对于:

meta http-equiv =“ content-type” content =“ text / html; charset = ISO-8859-1”

重新加载浏览器,我的欧洲名字和怪异字符现在可以正确打印了:)

对不起,英语不好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM