Android[HttpURLConnection]GET得到的数据中文是乱码

最近打算写一个小说阅读App,在使用HttpURLConnection GET请求中文网页,返回的结果中,某些中文字符显示成了乱码:???,在查看了请求的头,以及返回的header关于字符串编码,确认是UTF-8编码后,最终确认问题出在了读取数据流上。

    public String readAllInputStream(InputStream in) {
        if (null == in) return null;
 
        StringBuffer result = new StringBuffer();
        final byte[] buffer = new byte[16 * 1024];
        try {
            while (true)
            {
                int n = in.read(buffer);
                if (n == -1)
                    break;
 
                if (n > 0)
                {
                    result.append(new String(buffer, 0, n));
                }
            }
            return result.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

每次读取16KB数据后,将其转换为了String,这里正好可能卡在了汉字编码的中间,将完整的UTF-8编码的4个汉字字符分割开,修改为InputStreamReader带charset读取后,问题修复了。

    public static String readAllInputStream(InputStream in) {
        if (null == in) return null;
 
        StringBuffer result = new StringBuffer();
        final char[] buffer = new char[16 * 1024];
        try {
            InputStreamReader isr = new InputStreamReader(in, "UTF-8");
            while (true)
            {
                int n = isr.read(buffer);
                if (n == -1)
                    break;
 
                if (n > 0)
                {
                    result.append(new String(buffer, 0, n));
                }
            }
            return result.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

参考阅读:http://blog.csdn.net/lmj623565791/article/details/23562939