الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عند عمل post لفورم وارسال قيم عربية تظهر كرموز غريبة

بدأه أبو إبراهيم الثاني في 3 أغسطس 2011 · 3 رد · 937 مشاهدة · في Android
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي تطبيق يرسل قيم معينة لفورم لتخزينها بملف نصي

عند ارسال قيم انجليزية يتم تخزينها بالملف بشكل صحيح

لكن عند ارسال قيم عربية تخزن كرموز غريبة

الفروم مبرمج بphp وتم تجربته مع صفحة ويب ويتعامل مع العربية بدون مشاكل

أظن المشكلة بتطبيق الأندرويد نفسه

ربما يحتاج تحديد ترميز النصوص عند الإرسال UTF-8

هنا كود ارسال للفورم:



public void onClick(View v) {

HttpParams params = new BasicHttpParams();
HttpClient client = new DefaultHttpClient(params);
HttpPost post = new HttpPost("http://10.100.10.220/and/send.php");
String endResult = null;


try
{
List<NameValuePair> myList = new ArrayList<NameValuePair>();
//set values to send
myList.add(new BasicNameValuePair("name",Name));

post.setEntity(new UrlEncodedFormEntity(myList));
}
catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

try
{
String response = client.execute(post, new BasicResponseHandler());
endResult = response;
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

//show msg
textViewMsg = (TextView)findViewById(R.id.textViewMsg);
textViewMsg.setText(endResult);
}

تم تعديل هذه المشاركة بواسطة أبو إبراهيم الثاني في 3 أغسطس 2011 في 10:40

#2

ما هو كود ال

     post.setEntity(new UrlEncodedFormEntity(myList));

 UrlEncodedFormEntity

لا اعلم ان كان مناسبا

لكن استخدم التالي:

URLEncoder.encode("Text", "utf8");
#3

اعتقد انك ممكن تستخدم هذه الاداه

وهى وان لم تخوننى الذاكره انها للاخ.S.T.A.L.K.E.R

بصراحه انا بحثت عن الموضوع ولم اجده لكن اقتبست الكود من برنامج Edit Properties v4 للاخ العيافـي

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

/**
 * 
 * @author MErsan
 */
public class Unicode {

	private final static char[] HEX_DIGIT = {
    	'0', '1', '2', '3', '4', '5',
    	'6', '7', '8', '9', 'a', 'b',
    	'c', 'd', 'e', 'f'
	};

	public static String byteToHex(byte b) {
    	char[] array = {HEX_DIGIT[(b >> 4) & 0x0f], HEX_DIGIT[b & 0x0f]};
    	return new String(array);
	}

	public static String charToHex(char c) {
    	byte hi = (byte) (c >>> 8);
    	byte lo = (byte) (c & 0xff);
    	return byteToHex(hi) + byteToHex(lo);
	}

	//Unicode to Arabic [@author Nadeem Awad]
	public static String decode(String unicodeText) {
    	if (unicodeText == null || unicodeText.length() <= 0) {
        	return null;
    	}
    	StringBuffer arabic = new StringBuffer();
    	char[] chars = unicodeText.toCharArray();
    	for (int i = 0; i < chars.length; i++) {
        	char c = (char) chars;
        	boolean processedUnicode = false;
        	if (c == '\\') {
            	if (i + 5 < chars.length && chars[i + 1] == 'u') {
                	String hex = new String(chars, i + 2, 4);
                	try {
                    	arabic.append((char) Integer.parseInt(hex, 16));
                    	i += 5;
                    	processedUnicode = true;
                	} catch (Exception ex) {
                    	ex.printStackTrace();
                	}//catch
            	}
        	}
        	if (!processedUnicode) {
            	arabic.append(c);
        	}
    	}//for
    	return arabic.toString();

	}

	@Deprecated
	public static String encode(String arabicText) {
    	return encode(arabicText, false);
	}
	//Arabic To Unicode

	public static String encode(String arabicText, boolean convertNumber) {
    	if (arabicText == null || arabicText.length() <= 0) {
        	return null;
    	}
    	StringBuilder buffer = new StringBuilder();
    	try {
        	CharsetEncoder charsetEncoder = Charset.forName("ASCII").newEncoder();
        	char[] chars = arabicText.toCharArray();
        	for (int i = 0; i < chars.length; i++) {
            	char c = chars;
            	boolean canEncode = charsetEncoder.canEncode(c);
            	if (convertNumber) {
                	canEncode = (canEncode && !Character.isDigit(c));
            	}
            	if (canEncode) {
                	buffer.append(c);
            	} else {
                	buffer.append("\\u" + charToHex(c));
            	}
        	}
    	} catch (Exception e) {
        	Msgs.msgError(e);
    	}
    	return buffer.toString();
	}
}

Software Developer
Mahmoudkelany.com


 

#4
.S.T.A.L.K.E.R كتب:

ما هو كود ال

     post.setEntity(new UrlEncodedFormEntity(myList));

 UrlEncodedFormEntity

لا اعلم ان كان مناسبا

لكن استخدم التالي:

URLEncoder.encode("Text", "utf8");

Mahmoud Kelany كتب:

اعتقد انك ممكن تستخدم هذه الاداه

وهى وان لم تخوننى الذاكره انها للاخ.S.T.A.L.K.E.R

بصراحه انا بحثت عن الموضوع ولم اجده لكن اقتبست الكود من برنامج Edit Properties v4 للاخ العيافـي

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

/**
 * 
 * @author MErsan
 */
public class Unicode {

	private final static char[] HEX_DIGIT = {
    	'0', '1', '2', '3', '4', '5',
    	'6', '7', '8', '9', 'a', 'b',
    	'c', 'd', 'e', 'f'
	};

	public static String byteToHex(byte b) {
    	char[] array = {HEX_DIGIT[(b >> 4) & 0x0f], HEX_DIGIT[b & 0x0f]};
    	return new String(array);
	}

	public static String charToHex(char c) {
    	byte hi = (byte) (c >>> 8);
    	byte lo = (byte) (c & 0xff);
    	return byteToHex(hi) + byteToHex(lo);
	}

	//Unicode to Arabic [@author Nadeem Awad]
	public static String decode(String unicodeText) {
    	if (unicodeText == null || unicodeText.length() <= 0) {
        	return null;
    	}
    	StringBuffer arabic = new StringBuffer();
    	char[] chars = unicodeText.toCharArray();
    	for (int i = 0; i < chars.length; i++) {
        	char c = (char) chars;
        	boolean processedUnicode = false;
        	if (c == '\\') {
            	if (i + 5 < chars.length && chars[i + 1] == 'u') {
                	String hex = new String(chars, i + 2, 4);
                	try {
                    	arabic.append((char) Integer.parseInt(hex, 16));
                    	i += 5;
                    	processedUnicode = true;
                	} catch (Exception ex) {
                    	ex.printStackTrace();
                	}//catch
            	}
        	}
        	if (!processedUnicode) {
            	arabic.append(c);
        	}
    	}//for
    	return arabic.toString();

	}

	@Deprecated
	public static String encode(String arabicText) {
    	return encode(arabicText, false);
	}
	//Arabic To Unicode

	public static String encode(String arabicText, boolean convertNumber) {
    	if (arabicText == null || arabicText.length() <= 0) {
        	return null;
    	}
    	StringBuilder buffer = new StringBuilder();
    	try {
        	CharsetEncoder charsetEncoder = Charset.forName("ASCII").newEncoder();
        	char[] chars = arabicText.toCharArray();
        	for (int i = 0; i < chars.length; i++) {
            	char c = chars;
            	boolean canEncode = charsetEncoder.canEncode(c);
            	if (convertNumber) {
                	canEncode = (canEncode && !Character.isDigit(c));
            	}
            	if (canEncode) {
                	buffer.append(c);
            	} else {
                	buffer.append("\\u" + charToHex(c));
            	}
        	}
    	} catch (Exception e) {
        	Msgs.msgError(e);
    	}
    	return buffer.toString();
	}
}

شكرا لكما

سأجرب وأخبركما بالنتيجة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…