簡體   English   中英

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

[英]How to Decode String in Java or android?

我從android中的Json獲取數據,獲取並保存在String Variable.date中,但是使用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);

如何解決問題。

首先解碼指定您的編碼

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

然后轉到http://json.org/ ,向下滾動並選擇受支持的json解析Java庫之一

正如Selvin所說, %uxxxx不是標准的Url編碼的字符串,因此很容易出錯。

您有2個選擇:

  1. 請與服務提供商聯系以修復其url編碼的字符串,並在代碼中使用URLDecoder.decode
  2. 為此類字符串編寫自定義解碼器

PS可以更清楚地問您的問題,以避免產生負面影響

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM