[英]UTF-8 & ISO-8859-1 not working for decoding European charset in Java
嗨,我有一个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;
它就会立即输出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.