Python字符串解码套接字错误

时间:2018-07-26 08:29:32

标签: python python-3.x sockets runtime-error

当我尝试解码从客户端发送的字符串时,收到错误“'utf-8'编解码器无法解码字节0xff”(使用Python3)。

错误:

收到的数据:b'STORE Domingos 2018_07_26:09_33_15.jpg \ xff \ xd8 \ xff \ xe0 \ x00 \ x10JFIF \ x00 \ x01 \ x01 .....

UnicodeDecodeError:'utf-8'编解码器无法解码位置38:有效的起始字节的字节0xff

代码: (USER是一个普通字符串)

   RequestQueue queue = Volley.newRequestQueue(context.getApplicationContext());
                // String url = ServerUrls.BASE_URL + requestUrl;
                Log.i("URL:", "URL:--->" + requestUrl);
                StringRequest request = new StringRequest(Request.Method.GET, requestUrl, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                                UserNotification.notify(reqType, response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {

                        NetworkResponse response = volleyError.networkResponse;
                        if(response == null) {
                            if(reqType==Constants.NOTIFICATION_GET_MERCHANTS_LIST_REQUEST) {
                                UserNotification.
                                        notifyFragment(Constants.NOTIFICATION_HANDLE_ADD_BUTTON_MERCHANTS_LIST,"");
                            }else{
                                Utilities.showAlertMessage(AppController.getContext().getResources()
                                        .getString(R.string.network_connection_error), context);
                            }
                        }
                        else {
                            if (response.statusCode == 401) {
                                Utilities.showSessionExpiredDialog(context);
                            } else {
                                Utilities.showAlertMessage(Constants.VOLLEY_ERROR_SERVER, context);
                            }
                        }
                    }
                }) {

                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        try{
                            Map<String, String> hashMap = new HashMap<>();
                            hashMap.put("Authorization", "Bearer " + UserPreferences.getPreferenceString(Constants.ATHERIZATION_TOKEN,null));
                            return hashMap;
                        }catch (Throwable throwable){
                            throwable.printStackTrace();
                        }
                        return null;
                    }

                    @Override
                    public String getBodyContentType() {
                        return Constants.CONTENT_TYPE;
                    }
                };
                request.setRetryPolicy(new DefaultRetryPolicy(120000, 0, 1.5f));
               queue.add(request);
            } 
        } 

2 个答案:

答案 0 :(得分:0)

0xff在UTF-8中使用是非法的,请参阅here,在解码之前必须将其过滤掉。您可以使用:

data1 = data.decode("utf-8", errors="replace")

更新:您正在尝试将Jpg文件解码为无法正常工作的UTF-8。

答案 1 :(得分:0)

问题在代码后面。     conn.recv(1024)

在接收到字符串后,“ recv”未通过前面并接收到不需要的信息。

我解决了在收到字符串后向客户端发送确认字符串的问题。