مشکل در Encode یا Decode
با سلام
من با کدهای زیر و به وسیله کتابخانه Volley میخوام لاگین کنم و اگر لاگین درست انجام بشه اطلاعاتی رو به صورت جیسون دریافت میکنم.
تا اینجا که مشکلی نیست ولی اگر قسمتی از اطلاعات دریافتی کلمات فارسی باشن اون هارو به صورت نامفهوم برام برمیگردونه!
مثلا کلمه " آرام " رو به این شکل برام برمیگردونه : اراÙ
از تکینیک Encode هم استفاده کردم ولی نشد.
کدم رو پایین قرار دادم تا دوستان ببینن و ایراد کار من رو بهم بگن.
ممنون میشم راهنمایی کنید
final StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("onResponse login", response.toString());
try {
// startActivity(new Intent(ActivityLogin.this, ActivityMain.class));
// Toast.makeText(ActivityLogin.this, "" +response.toString(), Toast.LENGTH_SHORT).show();
JSONObject json = new JSONObject(response);
boolean login = (boolean) json.get("login");
if(login = true){
JSONObject updates = json.getJSONObject("updates");
JSONObject user = json.getJSONObject("user");
String User_ID = user.getString("User_ID");
String User_FirstName = user.getString("User_FirstName");
String User_LastName = user.getString("User_LastName");
String User_National_ID = user.getString("User_National_ID");
String UserName = user.getString("UserName");
String User_PhNumber = user.getString("User_PhNumber");
String User_Email = user.getString("User_Email");
String User_Device_ID = user.getString("User_Device_ID");
String Locked = user.getString("Locked");
String User_Rights = user.getString("User_Rights");
String User_level = user.getString("User_level");
String PopUp_Review_Count = user.getString("PopUp_Review_Count");
try {
** اینجا هم با دیکد خواستم درست کنم که باز نشد **
String name = URLDecoder.decode(User_FirstName, "utf-8");
byte[] bytes = name.getBytes("UTF-8");
String name1 = URLDecoder.decode(bytes.toString(), "utf-8");
Log.e("User_FirstName",name + " / " + name1);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();}
} else {
Toast.makeText(ActivityLogin1.this, "Can Not", Toast.LENGTH_SHORT).show();
}
}
catch (JSONException e) { }
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Error: " + error.getMessage());
pDialog.hide();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
String credentials = UserName + ":" + Password;
** اینجا انکد کردم ولی باز کلمات فارسی رو نامفهوم برام برمیگردونه **
String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headers.put("Content-Type", "application/json");
headers.put("Authorization", auth);
return headers;
}
};
RequestQueue queue = Volley.newRequestQueue(ActivityLogin.this);
queue.add(request);
با تشکر
طبیعتا مشکل از کتابخانه نیست.
و طبق دستورات بالا من حتی Encode هم انجام دادم.
ولی باز مشکل داشت که با Decode کردن اطلاعات دریافتی مشکل حل شد ولی انتظار منو برآورده نکرد.
JSONObject user = json.getJSONObject("user");
String FirstName = user.getString("User_FirstName");
String LastName = user.getString("User_LastName");
String User_FirstName = "";
String User_LastName = "";
try {
byte ptext[] = FirstName.getBytes("ISO-8859-1");
byte ptextL[] = LastName.getBytes("ISO-8859-1");
User_FirstName = new String(ptext, "UTF-8");
User_LastName = new String(ptextL, "UTF-8");
Log.e("User_FirstName", User_FirstName +" "+ User_LastName);
} catch (UnsupportedEncodingException e) {e.printStackTrace();}
میخوام کل جیسون دریافتی رو Decode کنم که با این روش امکان ذیر نیست. و مجبورم هر Objectرو بصورت جداگانه Decode کنم که کار منطقی نیست. کسی هست راهنمایی کنه؟
ممنون میشم
سلام ببخشید که یکم دیره. من همین مشکل رو داشتم با فانکشن زیر درست شد. امتحان کنید. البته الان در iOS همین مشکل رو دارم ولی درست نشده.
public static String textFormat(String name) {
String out = "";
try {
out = new String(name.getBytes("ISO-8859-1"), "UTF-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String decodedName = Html.fromHtml(out).toString();
return decodedName;
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .