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

حزم برنامج في جافا يؤثر على التراميز!

بدأه Speed_Of_Light في 1 ديسمبر 2009 · 6 رد · 832 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قمت بكتابة برنامج صغير في لإصلاح التراميز المعطلوبة لنصوص مرمزة بـ utf-8 ومفككة على أنها windows-1256

فمثلا:

ط§ظ„ط³ظ„ط§ظ… ط¹ظ„ظٹظƒظ…

تعني:

السلام عليكم

كتبت البرنامج على eclipse وجربته وهو يعمل 100%

ولكن عندما حولته إلى ملف jar أصبح يعطيني إشارات استفهام بدلاً من النص المصحح!

post-151966-12596181355048_thumb.png

post-151966-12596181476541_thumb.png

جربت البرنامج على netbeans ولكن نفس المشكلة!

جربت على ويندوز ولينكس وجربت استخدام خط Arial Unicode MS .... لعل وعسى ...

ولكن لم أستفد شيئاً !

أرجو إغنائنا بأفكاركم.

fixxxxer.java.zip

1
#2

هذا السطر غريب

t2.setText(utf8.decode(Win1256.encode(utf8.decode(ByteBuffer.wrap(b)))).toString());

لماذا تقوم بنفس العملية مرتين؟

جرب أن تعوضه بالتالي

t2.setText(utf8.decode(ByteBuffer.wrap(b)).toString());

إذا لم يعمل أعطنا الملف الذي فيه النص حتى نجرب

#3

شكراً لردك أخي herch

لماذا تقوم بنفس العملية مرتين؟

لكي أقوم بإصلاح النص !

أما عند استخدام كودك المقترح أحصل على البيانات بالترميز الخاطئ (كما يظهر في الصورة في مربع النص اليميني)

على كل حال وكما قلت لك، فالكود يعمل بشكل صحيح 100% عند تجربته من داخل الـ IDE لكن النص المصحح يتجول إلى إشارات استفهام عندما أحول الـ classes إلى ملف jar

النص المعطوب موجود بالمرفقات

testwrong.zip

#4

قمت بتحويل برنامجك إلى ملف jar وشغلته لكن لم يظهر لي المشكل الذي تتحدث عنه. الحروف العربية تظهر بشكل جيد

#5

حقاً !! غريبة بالفعل!

أي IDE استخدمت لتحويله ؟

أم أنك استخدمت "موجه الأوامر"؟ فإن كان موجه الأوامر فما هو الأمر الذي استخدمته لذلك ؟

ممكن ترسل لي ملف الـjar لأقارنه بالملف الموجود عندي وأجرب تشغيله هنا ؟

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 1 ديسمبر 2009 في 18:18

#6

عملت ملف jar باستخدام Netbeans وأيضا في سطر الأوامر (dos) الإثنين اشتغلوا بشكل جيد

الملف مرفق

JavaApplication11.zip

#7

الحمد لله ... انحلت المشكلة بشكل غريب !!

شكراً لك أخ herch لكن الملف الذي أرسلته عمل بشكل صحيح على ويندوز ولكنه لم يعمل على لينكس!

لكن بتعديل بسيط (وغريب!) على الكود أصبح يعمل على كلى النظامين بشكل سليم!

			public void actionPerformed(ActionEvent arg0) {
				int returnVal = fc.showOpenDialog(fixxxxer.this);
				if(returnVal == JFileChooser.APPROVE_OPTION) {
					try {
						f = fc.getSelectedFile();
						tf.setText(f.getAbsolutePath());
						fis = new FileInputStream(f);
					} catch (Exception e) {
						t2.setText("خطأ في قرائة الملف");
					}
					byte b[] = new byte[(int) f.length()];
					try {
						fis.read(b);
					} catch (Exception e) {
						t2.setText("خطأ في معالجة الملف");
					}
					t1.setText(utf8.decode(ByteBuffer.wrap(b)).toString());
 	CharBuffer charBuffer = utf8.decode(Win1256.encode(utf8.decode(ByteBuffer.wrap(b))));
 	t2.setText(charBuffer.toString());
				}
			}

وأيضاً:

	void updateText(){
		try {
			byte b[] = new byte[t1.getText().length()];
 			b = t1.getText().getBytes("UTF-8");
 	CharBuffer charBuffer = utf8.decode(Win1256.encode(utf8.decode(ByteBuffer.wrap(b))));
 	t2.setText(charBuffer.toString());
 		} catch (Exception e1) {
			t2.setText("خطأ في تحديث النص");
		}	
	}

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 1 ديسمبر 2009 في 23:11

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