org.apache.commons.io.IOUtils.toString误解UTF-8

时间:2012-08-07 15:51:45

标签: java url character-encoding

我正在尝试从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。那张I&αγÎμ)

而不是:

(Dellat.apăge'quita,aparta',y este del gr。ἄπαγε)。

同样,UTF-8(与其他代码和浏览器一起使用)和其他编码名称也会以类似的方式失败。

1 个答案:

答案 0 :(得分:3)

U + 0103(ă)被编码为字节序列C4 83;这些数据是UTF-8。

该错误可能是由于您通过附加到PrintStream的{​​{1}}执行的其他转码操作所致。这会将数据编码为system encoding,这可能是有损转换,如果写入的设备不使用匹配的编码,可能会导致损坏。

您可以阅读有关Windows控制台here的一些分析。