无法将URL内容作为UTF-8获取

时间:2013-03-19 18:36:49

标签: java url utf-8 inputstream

我正在尝试从网址中读取内容,但确实会返回奇怪的符号,而不是“è”,“à”等。

这是我正在使用的代码:

public static String getPageContent(String _url) {
    URL url;
    InputStream is = null;
    BufferedReader dis;
    String line;
    String text = "";
    try {
        url = new URL(_url);
        is = url.openStream();

        //This line should open the stream as UTF-8
        dis = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        while ((line = dis.readLine()) != null) {
            text += line + "\n";
        }
    } catch (MalformedURLException mue) {
        mue.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException ioe) {
            // nothing to see here
        }
    }
    return text;
}

我看到了其他类似的问题,所有这些问题都得到了回答,如

Declare your inputstream as 
new InputStreamReader(is, "UTF-8")

但我无法让它发挥作用。

例如,如果我的网址内容包含

è uno dei più

我得到了

è uno dei più

我缺少什么?

2 个答案:

答案 0 :(得分:1)

以你的榜样来判断。您确实收到一个多字节UTF-8字节流,但您的文本编辑器读入ISO-8859-1。告诉编辑器将字节读为UTF-8!

答案 1 :(得分:0)

我真的不知道为什么这不起作用,不过Java 7的方式是使用StandardCharsets.UTF_8参见

http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html

在(新)构造函数InputStreamReader(Charset cs中的InputStream)中,参见

http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html