Android 从json响应中删除符号

Android 从json响应中删除符号,android,json,android-volley,Android,Json,Android Volley,我正在使用Volley库进行JSON解析,解析响应如下: JSON响应: 我们可以看到,在回应的开始,一个符号正在到来。如何从Android端删除此符号而不将其转换为字符串?由于这个符号,我无法获取JSON对象 代码: 您的响应以字节顺序标记开始。在读取响应的级别,您需要确保流或用于执行的任何操作都知道响应的编码,显然它不是自动检测的。当它知道正确的编码时,它应该理解并处理BOM 通常,这是通过服务器响应中的Content-Type头来处理的,这就是它应该被修复的地方。但是,如果出于某种原因您无

我正在使用Volley库进行JSON解析,解析响应如下:

JSON响应:

我们可以看到,在回应的开始,一个符号正在到来。如何从Android端删除此符号而不将其转换为字符串?由于这个符号,我无法获取JSON对象

代码:


您的响应以字节顺序标记开始。在读取响应的级别,您需要确保流或用于执行的任何操作都知道响应的编码,显然它不是自动检测的。当它知道正确的编码时,它应该理解并处理BOM

通常,这是通过服务器响应中的Content-Type头来处理的,这就是它应该被修复的地方。但是,如果出于某种原因您无法在那里修复它,通常在创建读取流时会有一个选项来强制编码。你的看起来像UTF-8

不要只使用子字符串或类似的方法跳过它。字符串中的其他字符很可能由于使用了错误的编码而被错误解释。这不仅适用于晦涩难懂的字符,%符号因编码而异,欧元和其他任何数量的符号也是如此

更多信息:

解决方案1:

字符ï»?是,因此您应该检查编码

解决方案2:

您可以将响应字符串转换为UTF-8,如下所示:


我为我的问题找到了一个最简单的解决办法。当您发送POST请求的参数时,请将其置于代码行下方

代码如下:

完整代码:


我如何检查@Sager,你能解释一下吗?解决方案2是一个非常糟糕的主意。如果未处理BOM表,则流显然是用错误的编码读取的,流中的其他字符可能已损坏。@Abhishekkumar,请在获取此JSON的位置发布代码。使用代码更新@SagarZala@Abhishekkumar&Sagar-2仍然是一个非常糟糕的主意。您假设文本已正确解释为ISO-8859-1,但您不知道这是真的。这可能有效,也可能无效,但它肯定不是正确的解决方案。@Abhishekkumar-当然它已经是一个字符串了。是的,当我收到响应时,它只是一个字符串@T.J CrowderCan,请用代码解释它。我不明白。@Abhishekkumar-您必须向我们展示生成响应的服务器代码,因为这是应该修复的地方。如果出于某种原因,您无法在服务器端修复它,那么更糟糕的解决方案是在客户端修复它,正如我上面所说的,在创建读取流时强制进行编码。您必须向我们显示读取字符串的代码。@Abhishekkumar-我看到您添加了客户端代码。同样:这应该在服务器上通过发送正确的内容类型头来解决。这意味着我们必须通过服务器端@T.J.@Abhishekkumar来修复它-这是修复它的正确位置。正确识别发送的内容非常重要。
{"category":{"420":{"key":420,"label":{"420":"Acacia"},"count":"1"},"421":{"key":421,"label":.....
private void jsonRequestGetFilterData() {
    utils.showDialog();
    String url = Constants.FILTER_URL;
    Log.e("URL", "" + url);

    StringRequest eventoReq = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.e("RESPONSE", response);
                    utils.hideDialog();
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        Log.e("jsonObject",""+jsonObject);

                        JSONObject jsonObjectCategory = jsonObject.getJSONObject("category");
                        Log.e("jsonObjectCategory",""+jsonObjectCategory);



                    } catch (JSONException e) {
                        e.printStackTrace();
                        utils.hideDialog();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Error: ", "" + error.getMessage());
            utils.hideDialog();

        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            // Posting parameters to login url
            Map<String, String> params = new HashMap<String, String>();
            params.put("customer_id", pref.getString(Constants.SP_CUSTOMER_ID, ""));
            params.put("store_id", pref.getString(Constants.SP_STORE_ID, ""));
            params.put("currency_code", pref.getString(Constants.SP_CURRENCY_CODE, ""));

            Log.e("customer_id",""+pref.getString(Constants.SP_CUSTOMER_ID, ""));
            Log.e("store_id",""+pref.getString(Constants.SP_STORE_ID, ""));
            Log.e("currency_code",""+pref.getString(Constants.SP_CURRENCY_CODE, ""));
            return params;
        }
    };
    eventoReq.setRetryPolicy(new DefaultRetryPolicy(
            60000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


    AppController.getInstance(FilterActivity.this).addToRequestQueue(eventoReq);
}
@Override
public void onResponse(String response) {    
    try {
        response=new String(response.getBytes("ISO-8859-1"), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    Log.e("RESPONSE", response);

    ...................
}
 params.put("Content-Type", "application/json; charset=utf-8");
----------
 @Override
            protected Map<String, String> getParams() {
                // Posting parameters to login url
                Map<String, String> params = new HashMap<String, String>();

                params.put("Content-Type", "application/json; charset=utf-8");

                params.put("username", email.getText().toString().trim());
                params.put("password", pwd.getText().toString().trim());
                return params;
            }