2 bcpiaoli bcpiaoli 于 2016.02.21 23:40 提问

android客户端解析json,出现乱码 ( 没有中文 ) ,请大神指点

本人使用Tomcat apache-tomcat-8.0.28虚拟服务器,默认utf-8编码

update.json

{"versionName":"2.0","versionCode":2,"description":"Hello word!!","downloadUrl":"http://www.baidu.com"}

android studio 1.3.1 做了个客户端:部分编码如下:

private void checkVersion(){
new Thread(){
@Override
public void run() {

            try {
                URL url = new URL("http://10.0.2.2:8080/update.json");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                conn.connect();

                int responseCode = conn.getResponseCode();

                if(responseCode==200){
                    InputStream inputStream = conn.getInputStream();
                    String result = StreamUtils.readFromSteam(inputStream);
                    Log.e("System.Out.Print", "result:"+result);

                    //解析Json

                    JSONObject jo = new JSONObject(result);
                    mVersionName = jo.getString("versionName");
                    mVersionCode = jo.getInt("versionCode");
                    mDescription = jo.getString("description");
                    mDownloadUrl = jo.getString("downloadUrl");


                    Log.e("System.Out.Print", "run "+mVersionName+";"+mVersionCode);
                    Log.e("System.Out.Print", "run "+mDescription+";"+mDownloadUrl);
                }

            } catch (MalformedURLException e) {
               // utl错误的异常

                e.printStackTrace();
            } catch (IOException e) {
                //网络错误的异常

                e.printStackTrace();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }.start();
}

public class StreamUtils {

/**
 * readFromSteam() 将输入流读成String后返回
 * @return
 */
public static String readFromSteam(InputStream in) throws IOException {

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    int len = 0;
    byte[] buffer = new byte[1024];

    while((len=in.read())!=-1){
        out.write(buffer,0,len);
    }
        String result = out.toString();
        in.close();
        out.close();
    return result;
    }

}


    每次运行后的结果如下:

    ![图片说明](http://img.ask.csdn.net/upload/201602/21/1456069188_115538.jpg)


    请大神指点

10个回答

a999888huang
a999888huang   2016.02.22 00:14
已采纳

在用HttpURLConnection的时候,没有设置默认编码,可能是utf-8和 "ISO-8859-1"混淆了。
然后模拟器和手机不一样的原因是;Android版本不一样导致HttpURLConnection的具体实现不一样,记得Android4.4之后,HttpURLConnection底层采用HttpOK了。

bcpiaoli
bcpiaoli 谢了! 可不知怎么改,现改用xml解析了,成了。
接近 2 年之前 回复
bcpiaoli
bcpiaoli   2016.02.21 23:43

图片说明

bcpiaoli
bcpiaoli   2016.02.21 23:43

图片说明

bcpiaoli
bcpiaoli   2016.02.21 23:44

在模拟器中访问Json是正确的

bcpiaoli
bcpiaoli   2016.02.21 23:47

错误的截屏:

图片说明

u011046173
u011046173   2016.02.22 00:12

编码错误,看怎么改下编码

u011046173
u011046173   2016.02.22 00:12

编码错误,看怎么改下编码

u011249920
u011249920   2016.02.22 10:02

看着就是编码问题了。。。

Royal_lr
Royal_lr   Ds   Rxr 2016.02.22 12:08

编码的问题,,统一 一下编码

u012131702
u012131702   2016.02.28 13:48

不只是是不是AndroidStudio的问题。我也是遇到。不是网上说的设置AndroidStudio字体能解决的

bcpiaoli
bcpiaoli 我设置过了,没用。谢了!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!