View Full Version : دعوة للمساوة بين الحرف العربي والحرف الإنجليزي


tabuk
السلام عليكم ورحمة الله وبركاته
إخواني الكرام وخصوصا المبرمجين ،
لاحظت في الآونة الأخيرة كثرة استخدام ترميز اليونيكود خصوصا الترميز
UTF8
وفي هذا الترميز يمثل الحرف الإنجليزي في بايت واحد بينما الحرف العربي في بايتين اثنين
أتمنى أن نغار على حرفنا العربي حين لا يوضع على قدم المساوة مع الحرف الإنجليزي .
وهناك بعض أنظمة الترميز التي لا تظلم الحرف العربي مثل الترميز
windows cp-1256
ISO-8859-6
ففي النظامين السابقين يمثل كل من الحرفين في بايت واحد.

معلومة صغيرة توضح كيف يضرنا هذا الأمر:
هل تعلم لماذا رسائل الهاتف النقال تسمح برسالة إنجليزية طويلة واحدة بينما الرسالة العربية ليست كذلك
السبب هو أن الحرف الأنجليزي يمثل ببايت واحد بينما الحرف العربي يمثل في بايتين .

dr_tux
أنظمة الترميز قبل اليونيكود عقيمة ومتخلفة (عذرا)
تحتاج ترميز مختلف لكل لغة في العالم وهو ما يؤدي إلى مشاكل لا حصر لها، بينما يونيكود قادر عبى ترميز كل لغات العالم بترميز واحد
تخيل أن لديك ملف يحتوي نصوصا عربية وأخرى صينية مثلا، من المستحيل كتابة ملف كهذا بأي ترميز غير يونيكود

اقرأ هذا http://www.unicode.org/standard/translations/arabic.html

tabuk
شكرا أخي الكريم على ردك
ولكن لا أدري لماذا تقول : أنظمة الترميز قبل اليونيكود عقيمة ومتخلفة
بل على العكس من ذلك فقد كانت كتابة برامج تحتوي نصوصا عربية في غاية السهولة كما لو كانت نصوصا إنجليزية
وانظر إلى المبرمجين الذين يعانون من استخدام اليونيكود عندما لا يكون الحرف ممثلا ببايت واحد .

ولا أظن إن لغة سي مثلا تسمح بأن يكون النص مكتوبا باليونيكود ( أقصد النص البرمجي داخل ملف سي )


وأحب أن أوضح بأن هناك أنظمة يونيكود غيرالترميز
Utf-8
وبعض أنظمة اليونيكود تعطي الحرف الإنجليزي بايتين اثنين أي 16 بت وهناك يونيكود 32 بت ( حتى الحرف الإنجليزي يمثل في 4 بايت )
والاعتراض هو عندما لا تكون المساوة بين الحرف العربي ونظيره الحرف الإنجليزي

أما من يتحدث عن أن اليونيكود يمكن من كتابة نصوص صينية وكورية ويابنية وتايلندية وعربية - وغيرها الكثير- في صفحة واحدة فهذا صحيح وعندها يجب أن نستخدم نظام يونيكود يقدر حرفنا العربي ويضعه في منزلة متساوية مع الحرف الإنجليزي كما في ترميز اليونيكود
Utf-32
ولكن لا أظن أننا نحتاج غالبا إلى أكثر من العربية والإنجليزية في كتابتنا وفي هذه الحالة يكفينا ترميز بطول 8 بت أي بايت واحد لكل حرف

ErrorMsg
أحب أن أنبه على أن unicode
ليس utf8
في unicode تمثل كل حرف بأربعة بابت
حتى ASCII الإنجليزي

أما utf8
تستطيع أن تنظر لها على أنها طريقة ضغط
------
أما ترميزات ما قبل يوني كود
إنها أكثر من عقيمة إنها شريرة وتهدف للقضاء على اللغة العربية ومعاملتها على أنها حالة شاذة

يكفي أن يوني كود تدعم الرسم العثماني

ولتذهب مايكروزفت إلى ال....

----

لا تغضبني بإهانة البرمجيات الحرة إنها أحرص على اللغة العربية من شركات تعاملنا على أننا رعيان نمتلك نقود لا نعلم كيف نصرفها

فقط احصل على عدد من مجلة PC MAG
في فترة 1995

وإقرأ كيف كان يحدث مشاكل لها أول ليس لها آخر بسبب ما تمدحه

مثلاً

كان يشكو أحدهم أنه لا يستطيع تثبيت برنامجي القرآن والحديث من صخر معاً
لأن الأول يدعم تعريب صخر للويندوز بترخيص من مايكروسوفت
سمي التعريب الشفاف
وهو تعريب غبي يستند إلى فضلة/زبالة 128 كود

والثاني يعتمد تعريب 1256 من مايكروسوفت نفسها وهو
وهو تعريب غبي يستند إلى فضلة/زبالة 128 كود

---------

إذا كان الحجم هو المشكلة فسأخبرك أمرين
الأول أن اللغة الصينية وهي لمليار متكلم كل حرف ب أربعة إلى ستة بايت

الثاني أن التقنيات التي نستعملها تجعل هذا الفرق بلا قيمة
مثلاً حجم لسان العرب برتميز 1256 من مايكروزفت
أو iso-XXXX-6
هو نفسه حجمه ب utf8
عند استخدام هيئة الثواب التي اخترعتها
فطريقة utf8
تضغط إلى نفس الحجم الذي يضغط له الملف العادي

جرب ذلك اكتب نص كبير وخزنه بالطريقتين

ثم قم بضغط كل واحد وانظر الناتج

tabuk
شكرا أخي مؤيد على ردك ولكن أحب أن أذكرك بأن هناك ترميز 8بت من الأيزو وهو
ISO-8859-6
وهو منظمة تحدد المقاييس ، وطبعا التحويل بين هذا الترميز وترميز الوندوز 1256 سهل جدا ويمكن أن يتم بالأمر :
tr
بل يمكن التحويل بين أي أنظمة ترميز بطول 8بت بنفس الأمر السهل ( وظيفة هذا الأمر تحويل البايت إلى بايت أخر )
ولكن هذا الأمر لن يساعد في التحويل إلى أنظمة ترميز تستخدم أكثر من بايت واحد .
بالنسبة للترميز Utf-8
هو ليس طريقة ضغط بل هو ترميز لم يجرؤ أن يلمس الحروف الإنجليزية آسكي ( ولهذا السبب لن يزيد في حجمها) ولكن مع الحرف العربي سوف يمثل في بايتين وبالتالي يزداد الحجم في الذاكرة وعند التخزين بمقدار الضعف للحرف العربي ( أريد الحجم الحقيقي وليس الحجم بعد الضغط ).
أخي الكريم
صحيح أن رموز الآسكي هي فقط الرموز الـ 128 ويبقى بعدها 128 رمز كافية لتمثيل الحروف العربية وهي ليست زبالة أو فضلة فحتى اللغات الأوربية تستفيد من هذا الحيز لوضع الحروف التي تحتاجها لغاتها وأظن أنهم يعتزون بلغاتهم ولا يرضون لها ما تقول .
بل إنهم قاموا بوضع ترميز يحتوي رمز اليورو - نعم ترميز بطول 8بت هو ايزو 15- هذا رد على من يقول أن ترميز 8بت سينقرض .
ملاحظة : لم يكن الأمريكيون يقصدون وضع 128 رمز فارغ ولكن السبب هو أنهم استخدموا ترميز 7بت وترك الثامن لعملية التحقق من الصحة .

أكرر بأن الحجم عندما نستخدم ترميز اليونيكود سوف يكون أكبر بالنسبة للحرف العربي.
ثم يأخي مؤيد اذا كانت لا ترضى بأن يوضع الحرف العربي في المنطقة بعد الرموز الـ 128 ما رأيك أن نضع رموزنا العربية في القسم الخاص بآسكي.
( هذا ممكن إذا كان النص عربيا فقط )
ملاحظة : يجب أن نعرف أن في ترميز 8بت يكون هناك تساوي بين الحرف الإنجليزي والحرف العربي حيث يكون كل حرف ممثل في بايت واحد.
أود التوضيح بأن الترميز بطول 8بت لا يحدد أشكال الحرف العربي المتعددة فكلمة (ههه) تتكون من حرف واحد مكرر ثلاث مرات وليس من حرف هاء في صورة البداية وحرف هاء متوسط وحرف هاء بصورة النهاية.
مثال للتوضيح :
إذا كانت عندي قاعدة بيانات واستخدمت ترميز بطول 8بت للحرف العربي وقمت بتخزين كلمة ( أحمد ) فسوف تخزن هذه الحروف الأربعة وعندما يريد المستخدم أن ينظر الى البيانات تتم عملية تجهيز شكل الكلمة .

بالمناسبة أخي الكريم أظن موضوع تشبيه الزبالة يليق أكثر بترميز اليونيكود حيث هناك كل من هب ودب من الحروف ( آلاف الحروف )
يجب أن لا أطيل عليكم فهذا المنتدى يستخدم ترميز يجعل الحرف العربي يشغل بايتين اثنين وربما كان من الأفضل استخدام ترميز 8بت فهو يسمح بمشاركات عربية أطول كما الإنجليزية - يجب أن لاننسى قصة رسائل الهاتف النقال وكيف نخسر كثيرا عند استخدام رسائل عربية بسبب ترميز اليونيكود

ErrorMsg
مرة أخرى utf8
هي طريقة لتمثيل نظام يونيكود ذي ال 32 بت يعني 4 بايت
تم ضغطه بطريقة موجدة في man utf8
مثلاً المسافة في يوني كود هي
0x00000020
وهكذا
أما utf8 في طريقة لتمثيل كل تلك الرموز الكثيرة بعمل mapping بطريقة تشبه
Haffman code
أول كذا بت حتى أول صفر تمثل طول والبقية تمثل الإزاحة
----
أما القول أنهم يفضلون الحروف اللاتينية الغربية على العربية فهذا خطأ حيث أن
الكثير من الرموز والأحرف
كالتي عليها حركات في الفرنسية وغيرها ومثال اليورو الذي ذكرته حضرتك
تمثل بأكثر من بايت
فقط ASCII هي التي تمثل بذاتها
وذلك لأسباب تاريخية
وهذه ميزة وليست عيب حيث أن كل البرامج التي صممت على ASCII تعمل على يوني كود دون تغيير
تستطيع استعمال strcpy و strcat ...إلخ
لكنك لا تسطيع عمل ذلك على أي ترميز آخر يشمل كل لغات العالم بما في ذلك يونيكود
----
أما كون ISO8896-6
يستخدم فضلة 128 بايت
إن لم أكن مخطئا وليس كما ذكرت 8859

فهذا شيء طبيعي
فذلك لم يكن الهدف منه كما أنني لم أمدح ISO
الهدف من الISO هو المعيرة
وليس التصليح

لقد مدحت يونيكود و utf8 لسببين ولم ترد عليهما
1- يدعم العلامات الخاصة بالرسم العثماني وهو الوحيد
وكل برمجيات التي توفر الرسم العثماني في يوندوز
ضحك على اللحى
يعني بطرق إلتفافية أو بعمل أحرف إنجليزية يتم استبدالها لاحقاً بصور
أو حروف محجوزة لا ندري متى نصطدم بالحاجة إليها
2- معياري موحد لا تتحكم به أهواء شركة ملعونة

لماذا ما بعد 128 فضلة ؟
سؤال بسيط، لأنك لن تعرف من أي لغة جاء
وهناك لغط في تفسيره
مثلاً يا أخي المسلم كيسف سيتصرف أخوك الشيشاني
إن له لغة ويريد اللغة العربية وبالتأكيد ال ASCII الخاصة بالحاسوب

أما قصة الهاتف النقال التي حرقت رأسك فذلك بكل بساطة حقارة في شركات الخلوي وغباء في SMS
وكأنك تقول أن الوقود النووي سيء لأنه لا يدير سيارة الفوكس!
قد يكون الوقود النووي سيء لكن بالتأكيد ليس بسبب الفوكس

يجب أن نتخلص من فكرة إعادة اختراع العجلة

أنا لن اسهام في اختراع المصباح الكهربائي من جديد لمجرد أن من اخترعه كافر
----
أما قاعدة البيانات التي تحدثت عنها
فقاعدة البيانات التي أستخدمها في مشروع ثواب تعمل دون الحاجة لفك الضغط
وصدقني لقد جربتها شخصياً وعلى كل التراميز
أنا لا أحب الكلام النظري
ولا عمل Bengmarking على بيانات دمية

لقد أحضرت لسان العرب وحولته إلى هيئة ملفات الثواب
وهي هيئة tar.bz2 ألقياسية مع بعض التطوير

بمختلف التراميز وكانت النتيجة فوز utf8 بالضربة القاضية

tabuk
أخي الكريم
مرة أخرى أقول أن ترميز
UTF-8
ليس طريقة ضغط بل هو ترميز يونيكود يتعامل مع الآسكي دون تغيير أي في بايت واحد ( وهذا طبعا جيد للحرف الإنجليزي فقط )
وبالنسبة للحرف العربي فهو يمثل في بايتين اثنين ، لمزيد من المعلومات :
http://en.wikipedia.org/wiki/UTF-8

بالنسبة للكلام حول اليورو واللغات الأوربية فهم غالبا يستخدمون ترميز 8بت من الآيزو أو الويندوز .
انظر ترميز الموقع التالي:
http://www.linux.de ( ISO-8859-1 )
بالنسبة لرمز اليورو صحيح أنه موجود في اليونيكود ولكن أحب التذكير بأنه موجود في ترميز 8بت هو ترميز
ISO-8859-15
http://en.wikipedia.org/wiki/ISO-8859-1

بالنسبة للكلام عن أن مابعد 128 هو فضلة لأنه ليس من الممكن تحديد من أي لغة أتى ( بمعنى أنك لا تستطيع معرفة اللغة المستخدمة فقد تكون عربية أو روسية أو غيرذلك )
أرد على هذا الكلام بأن فائدة استخدام بايت واحد للحرف العربي أكبر بكثير من هذه المشكلة الصغيرة
وإليك هذا المثال البسيط للتوضيح :
لو أنك وجدت ملف نصي في أحد المواقع العربية وكان هناك رموز مابعد 128 فهل سيظن أحد أنها رموز روسية ، هل يجب عليك البحث بين مئات أنظمة الترميز ذات 8بت لكي تعرف ماهو مكتوب .
أظن أن الجواب سهل وأي مستخدم لديه خبرة بسيطة سوف يجرب ترميزين وهما ترميز الوندوز أو ترميز الآيزو .

بالنسبة لموضوع رسائل الهاتف النقال فقد ركزت عليها لأنها أوضح مثال على مشكلة ترميز الحرف العربي في بايتين اثنين ( الحل هو استخدام ترميز بايت واحد للحرف العربي) طبعا أنصح من يستخدم اللغة الصينية في رسائله باستخدام اليونيكود .
ونفس مشكلة رسائل الهاتف النقال تتكرر مع مواقع الإنترنت -إذا تم استخدام ترميز اليونيكود -
ستكون المشاركة العربية بنصف طول المشاركة الإنجليزية
سوف يزداد ضغط الحركة على الموقع لأن الحرف العربي يشغل بايتين اثنين . ( صفحة إنترنت بترميز 8بت أصغر من صفحة بترميز يونيكود )

والمشكلة موجودة أيضا عند البرمحة فسوف يشغل الحرف العربي ذاكرة ضعف مايشغله الحرف الإنجليزي ، والمشكلة الأكبر في البرمجة في هذه الحالة أن الحرف العربي ليس ممثلا في بايت واحد كما الحرف الإنجليزي .
أحب التوضيح بأن ترميز 8بت يسمح باللغة الإنجليزية والعربية ( وهو ما نحتاجه في 99% من الحالات )

لا أدري لماذا يصر البعض على استخدام ترميز اليونيكود حتى عندما لا تكون هناك حاجة إليه كما في موقع عرب آيز فهل يظنون أنه ستكون هناك مشاركات بللغة الكورية أو الصينية إلى جانب المشاركات العربية.

ملاحظة : أقصد في ترميز اليونيكود الترميز:
UTF-8

ErrorMsg
> ملاحظة : أقصد في ترميز اليونيكود الترميز: UTF-8
but the whole world use unicode to mean unicode, not UTF-8

UTF-8 is a different thing
if you don't want to get it it's your problem
UTF-8 and UNICODE are different things but on Windows they just say UNICODE
maybe that's why

www.unicode.org
http://www.unicode.org/standard/translations/arabic.html
http://www.unicode.org/charts/charindex.html

for example 0x01CE is the UNICODE for
A WITH CARON, LATIN SMALL LETTER 0x01CE

while the UTF-8 is 8-bit sequence that is not the two bytes 0x01 0xCE
but something different use gucharmap to get the UTF-8 corresponding to UNICODE 0x01CE

to see that it's 0xc7 0x8e

please please do your self a favor and read utf8 manual page on Linux