【发布时间】:2012-08-07 15:51:45
【问题描述】:
我正在尝试从 URI 获取源。它被报告为 UTF-8。我也尝试过 ISO-8859-1、ISO-8859-1 Windows-1250 和 ISO-8859-2。
这是我最近尝试的代码(尝试 ISO-8859-2):
public static String getPage(String page,String charset) throws IOException{
URL url=new URL(page);
return org.apache.commons.io.IOUtils.toString(url.openConnection().getInputStream(),charset);
}
public static void main(String args[])throws Exception{
String page=getPage("http://buscon.rae.es/drae/srv/search?val=aba","ISO-8859-2");
System.out.println(page);
}
但结果是:
apÄ?ge 'quita, aparta', y este del gr. á¼?Ï?αγγμ)
代替:
(Del lat.apăge 'quita, aparta', y este del gr.ἄπαγε)。
同样,UTF-8(适用于其他代码和浏览器)和其他编码名称也会以类似的方式失败。
【问题讨论】:
-
在您的示例中返回的 URI 实体使用 UTF-8(对他们有好处,在当今时代,尤其是在网络上,没有必要使用 ISO-8859-2)。我们可以从
text/html; charset=UTF-8标头中看到这一点。它也是西班牙语(在词源中有一些拉丁语和一些希腊语)。这是真正的URI吗?查看 UTF-8 实体无法重现问题。 -
再见。做一个快速的 .NET 下载器,我得到 (Del lat.apăge 'quita, aparta', y este del gr.ἄπαγε)。如果将其视为 UTF-8。绝对是 UTF-8。
-
如果我在 Java 中使用 UTF-8 它不会返回相同的
-
遗憾的是,我知道这个问题的网络和字符编码部分,而不是 Java 部分。您提供的 URI 返回非常好的 UTF-8,这是错误的 Java 位。 (除非您使用不同的 URI,否则罗马尼亚语在哪里出现?)。
-
这是一个问题。你是怎么看输出的?那里可能存在编码问题吗?奇怪的是,您在 ISO-8859-2 尝试中得到了
Ïαγε,因为其中一些字符不在 ISO-8859-2 中!您能否再次尝试使用 UTF-8,并将输出保存到 UTF-8 文本文件而不是写入控制台?也许代码使用 UTF-8 是完美的,但控制台让你失望了。
标签: java url character-encoding