如何在Java或android中解码字符串?

时间:2013-09-20 14:34:36

标签: java android json urldecode

我从android中的Json获取数据,日期获取并保存在String Variable中。但是当使用DecodeUrl时出现错误:

  

错误:java.lang.IllegalArgumentException:40处的%序列无效:

我的代码:

@SuppressLint("NewApi")
    public String JsonReguest(String url) {
        String json = "";
        String result = "";
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);

        HttpClient httpclient = new DefaultHttpClient();

        // Prepare a request object

        HttpGet httpget = new HttpGet(url);
        httpget.setHeader("Accept", "application/json");
        httpget.setHeader("Content-Type", "application/json");


        HttpResponse response;
        try {


            response = httpclient.execute(httpget);
            response.setHeader("Content-Type","UTF-8");
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                InputStream instream = entity.getContent();

                result = convertStreamToString(instream);
                InputStream stream = new ByteArrayInputStream(result.getBytes("UTF-8"));
                result = convertStreamToString(stream);

                // String encode_url=URLEncoder.encode(result,"UTF-8");
                // String decode_url=URLDecoder.decode(encode_url,"UTF-8");

                //result=decode_url;
                //String decodedUrl = URLDecoder.decode(result, "UTF-8");
                result=URLDecoder.decode(result);

            }
        } catch (Exception e) {
            Log.e("Error", e.toString()); 
        }
        return result;
    }

    public static String convertStreamToString(InputStream is) {


        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

json的简单文字:

{"CategoryID":11,"ParentID":0,"Title":"%u062E%u0648%u062F%u0631%u0648","PicAddress":""},{"CategoryID":16,"ParentID":0,"Title":"%u0627%u0645%u0644%u0627%u0643%20","PicAddress":""}
  

此行崩溃:result = URLDecoder.decode(result);

如何解决问题。

2 个答案:

答案 0 :(得分:2)

首先解码指定你的编码

String result = URLDecoder.decode(url, "UTF-8");

然后转到http://json.org/,向下滚动并选择一个受支持的json解析Java库

答案 1 :(得分:2)

由于Selvin评论%uxxxx不是标准的Url编码字符串,因此很明显会出现错误

你有两个选择:

  1. 与服务提供商联系以修复其网址编码字符串,并在代码中使用URLDecoder.decode
  2. 为此类字符串编写自定义解码器
  3. P.S。更清楚地提出你的问题以避免得到负面因素