当我尝试解码从客户端发送的字符串时,收到错误“'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);
}
}
答案 0 :(得分:0)
0xff
在UTF-8中使用是非法的,请参阅here,在解码之前必须将其过滤掉。您可以使用:
data1 = data.decode("utf-8", errors="replace")
更新:您正在尝试将Jpg文件解码为无法正常工作的UTF-8。
答案 1 :(得分:0)
问题在代码后面。 conn.recv(1024)
在接收到字符串后,“ recv”未通过前面并接收到不需要的信息。
我解决了在收到字符串后向客户端发送确认字符串的问题。