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

مشكلة في التحويل من byte إلى string

بدأه pure love في 22 نوفمبر 2010 · 13 رد · 555 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أعزائي الأفاضل.. أتمنى منكم ابداء حلولكم حول مشكلة واجهتني

أريد القراءة من ملف في الجوال ثم التحويل الى string لعرضه على الشاشة وارساله الى server

وفعلت ذلك ولكن عند عرض القراءة بعد التحويل تظهر الحروف بشكل آخر كذلك بعد الارسال

جربت أكثر من طريقة وجربت التحويل إلى string وترميزها إلى utf-8 ولكن لاجدوى في كل طريقة أحصل على نواتج مختلفه عما في الملف

أرجو منكم التكرم بمساعدتي عاجلا

  FileConnection fc = (FileConnection)Connector.open("file://localhost/" + currDirName + fileName);   

           InputStream fis = fc.openInputStream();   


          ByteArrayOutputStream bb = new ByteArrayOutputStream(); 			
            byte[] bufferByte = new byte[1024]; 

			while (fis.read(bufferByte) != -1)
			{ 
                bb.write(bufferByte); 
           }
	//String ss=new String(bb.toByteArray(),"UTF-8");

		                   String s= bufferByte.toString();

تم تعديل هذه المشاركة بواسطة pure love في 22 نوفمبر 2010 في 05:34

#2

هل ممكن ان تضع لنا ما هي البيانات التي داخل الملف وكيف تظهر عندك عند تحويلها الى String

#3

سؤال ...

لم تريد تحويل الملف قبل إرساله؟!

فقط قم بتحويله ل String إذا أردت عرضه للمستخدم...

بالمناسبه ...

لا تستخدم الداله

OutputStream.write(byte[])

تم تعديل هذه المشاركة بواسطة هويدي في 22 نوفمبر 2010 في 10:18

#4
مهدي حجازي كتب:

هل ممكن ان تضع لنا ما هي البيانات التي داخل الملف وكيف تظهر عندك عند تحويلها الى String

مثلا

j2me

بعد التحويل تصبح

 [B@f45c2393

والملف txt

عندما قرأت ملف doc واردت فتحه يطلب مني اختار نوع الترميز

وشكرا لك

هويدي كتب:

سؤال ...

لم تريد تحويل الملف قبل إرساله؟!

فقط قم بتحويله ل String إذا أردت عرضه للمستخدم...

بالمناسبه ...

لا تستخدم الداله

OutputStream.write(byte[])

حتى ارى محتويات الملف من خلال التطبيق قبل الارسال وان حولته بعد الارسال ستظل المشكله

هل أستخدم obex حتى تنحل المشكله لأني اريد ارسال صيغ متنوعه كالبوربوينت وبي دي اف

وشكرا على التنبيه

#5

تذكرت نقطة

وهي ان المشكلة تحدث مع جوال نوكيا أم على جوال LG تظهر الكلمات كما هي

#6
pure love كتب:

مثلا

j2me

بعد التحويل تصبح

 [B@f45c2393

هل تستخدم Encryption ؟؟ "تشفير"

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

هل تستخدم Encryption ؟؟ "تشفير"

لا

#8
اقتباس
[b@f45c2393

ما أعرفه ... أن طباعة مثل هذه الأحرف هو طباعة ال byte array بطريقة خاطئه..

byte[] arr = {0x42, 0x59, 0x71};
System.out.println(arr);		// prints: [B@18d107f
System.out.println(new String(arr));		// prints: BYq
#9
هويدي كتب:

سؤال ...

لم تريد تحويل الملف قبل إرساله؟!

فقط قم بتحويله ل String إذا أردت عرضه للمستخدم...

بالمناسبه ...

لا تستخدم الداله

OutputStream.write(byte[])

يبدو انك لم تشرح السبب في مدونتك

عند استخدام

OutputStream.write(byte[])

فأتك فعليا تستخدم

 public void write(byte b[]) throws IOException {
	write(b, 0, b.length);
    }

لذلك سوف يتحتم كتابة كل محتويات المصفوفة، حتى الفارغ منها، لانه استخدم

b.length

و لم يستخدم ما تمت كتابته فعليا في المصفوفة، في هذه الحالة كما تكلمت في مدونتك سوف تحصل على some invalid data

و تكون زيادة على بياناتك

لكن انا استخدمها لكن بوضع ال bufeer = 1 byte

byte[] buffer = new byte[1];  
            while (fis.read(buffer) != -1) {
                baos.write(buffer);
            }

اعلم انها قد تأخذ وقت اطول، لكن هكذ لن يحدث الخطأ الذي تحدثت عنه

شكرا يا هويدي للمعلومة

هويدي كتب:

ما أعرفه ... أن طباعة مثل هذه الأحرف هو طباعة ال byte array بطريقة خاطئه..

byte[] arr = {0x42, 0x59, 0x71};
System.out.println(arr);		// prints: [B@18d107f
System.out.println(new String(arr));		// prints: BYq

اذا هو فعليا لا يقوم بتحويل ال bytes ال String !!! انما يطبعها مباشرة (B@18d107f = اسم الصف + الhashcode)

#10

شكرا يا أبا عرسان على تفاعلك ...

حقيقة لم أقم بالشرح لأني أعرف أن من يقرأ الموضوع قد يفهمه ... و إلا فهو لا يستحق فهمه... (ههههههههههه)

اقتباس
لكن انا استخدمها لكن بوضع ال bufeer = 1 byte

ههههه ... إذا ما الحكمه أصلا من إستخدام Buffer ؟؟ يمكنك إذن أن تستخدم النسخه من الداله التي تقوم بإرجاع int ولا تأخذ أي شئ

#11

جربت اقرأ واحفظ في كل مره char بإضافتها الى StringBuffer ثم التحويل الى String ولم اتوصل لنتيجه

!!!!

أعتقد ان المشكلة تكمن في نوع نظام الموبايل

لأنها لم تظهر المشكله مع موبايل LG حينما استخدمت

        //String ss=new String(bb.toByteArray(),"UTF-8");

تم تعديل هذه المشاركة بواسطة pure love في 22 نوفمبر 2010 في 18:24

#12
هويدي كتب:

ههههه ... إذا ما الحكمه أصلا من إستخدام Buffer ؟؟ يمكنك إذن أن تستخدم النسخه من الداله التي تقوم بإرجاع int ولا تأخذ أي شئ

فعلا عاده ما استخدم الداله بدون buffer واستخدم القراءه على انها int

ليه بتضع 1 ؟؟؟

نفس السوال اللى سأله هويدى :)

حاجه خارجه عن السوال :D

ازيك يا هويدى وازيك يا ابوعرسان ليكم وحشه :)

Software Developer
Mahmoudkelany.com


 

#13
اقتباس
فعلا عاده ما استخدم الداله بدون buffer واستخدم القراءه على انها int

كلام سليم 100%

ولكن انا تكلمت عن كيفية تجنب المشكلة :blush: (فضحتونا)

و لكن قد يكون هنالك حالات تتوجب الطريقة التي تحدثت عنها، لاني فعليا استخدمتها، لكن لا اذكر لماذا

#14
pure love كتب:

جربت اقرأ واحفظ في كل مره char بإضافتها الى StringBuffer ثم التحويل الى String ولم اتوصل لنتيجه

!!!!

أعتقد ان المشكلة تكمن في نوع نظام الموبايل

لأنها لم تظهر المشكله مع موبايل LG حينما استخدمت

        //String ss=new String(bb.toByteArray(),"UTF-8");

لا أظن ذلك, لم تمر علي اي مشكله في اي نظام هاتف من قبل مع UTF8. هل يمكنك ارفاق الكود كاملا مع الملف الذي تقرأ منه لأجربه.

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