آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در Encode یا Decode

mosafer  9 سال پیش  8 سال پیش
+1 0

با سلام

من با کدهای زیر و به وسیله کتابخانه 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);

با تشکر

+1 0
سلام من چند روز پیش از این کتابخونه استفاده کردم و داخل دیتابیسش هم از کلمات فارسی استفاده کردم بدون هیچ مشکلی برنامه کار کرد.به نظرم اگه مشکلی هم باشه باید برید سمت دیتابیس و نحوه ذخیره اطلاعات . (9 سال پیش)
0 0
خب من هم همین فکر رو کردم و به سمت سرور گفتم که مشکل از سمت شماست ولی گفتن که باید انکدینگتو تعیین کنی که خب منم تعیین کردم ولی یه جای کار میلنگه انگار. (9 سال پیش)
+1 0
احتمالاشما باید توی کدهای سمت سرورتون از utf-8 استفاده کنید وگرنه من هم از کتابخونه استفاده کردم و مشکلی نداشت. (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
mosafer  9 سال پیش
0 0

طبیعتا مشکل از کتابخانه نیست.

و طبق دستورات بالا من حتی 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 کنم که کار منطقی نیست. کسی هست راهنمایی کنه؟

ممنون میشم

پاسخ به سوال 
Mr.AHN  8 سال پیش
0 0

سلام ببخشید که یکم دیره. من همین مشکل رو داشتم با فانکشن زیر درست شد. امتحان کنید. البته الان در 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;
    }


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .