درس شرح لحل مشكلة اللغة العربية في النوت باد
إن الحديث عن موضوع الـ Unicode والـ Encoding
يعتبر من الأساسيات الضرورية Fundamental Concepts لأي مبرمج ومهندس برمجيات،
واكمالاً لسلسه
(أساسيات يجب أن يعرفها اي مبرمج)
فقد طرحنا سؤالاً عن مشكلة عامه نراها كثيراً بشكل دوري الا
وهي أن النص العربي لا يظهر بشكل مقروء عند فتحه في الـ Notepad
وقد تم أخذ مثال من الموسوعة الشاملة (وهي تتكون من ملفات txt كثيرة)،
وكانت هذه الجزئية من الملف هي ال test case لسؤالنا (حمله من هنا) :
كما هو واضح من الصورة أن النص غير مقروء عند فتحه على الجهاز
وهناك مشكلة في الترميز وتحتاج لاصلاح
السؤال الذي سنجيب عليه لماذا ظهر الملف هكذا عند فتحه
وكيف يمكن اصلاحه وارجاعه الى نص مقروء ؟
الحل الذي ارسله أكثر المبرمجين ينطوي تحت كلمة Unicode
وأنه يجب أن يتم تحويل الملف الى UTF-8
حتى يتم اصلاح الملف وارجاعه الى الصيغه الأصلية..
لنرى هذه الحلول وكيف أنها قد لا تحل المشكلة:
تحويل ترميز الملف باستخدام الـ Notepad كما تلاحظ نفس المخرج بالضبط بعد تحويله لـ UTF-8:
وبنفس الفكرة هنا بعد ترميز الملف ب UTF-8 باستخدام Notepad++ أو اي طريقة اخرى ستجد نفس المخرج
ملاحظة: في حال ظهر الملف بعد تحميله بشكل صحيح
وبعد تغيير ال Encoding بأحد الطرق السابقة سوف يظهر بشكل صحيح
وذلك لأنك تستخدم نظام لغته الافتراضيه هي العربية Default Locale is Arabic
ولذلك فلن تلاحظ هذه المشكلة
وستجد الملف باللغه العربية الصحيح، لكن يمكنك القرائه في الموضوع
حتى تعرف سبب المشكلة خصوصاً انها كانت بسبب شخص لديه نفس اعداداتك.
اذاً ما هو الحل اذا لم يظهر النص بشكل صحيح؟
في مثل هذه المسائل عليك بمعرفة نوع الترميز الذي استخدم في انشاء الملف، هناك طرق كثيرة مثلاً :
رمي الملف على المتصفح وسوف يحاول المتصفح معرفة الترميز بنفسه
وسوف تجده من قائمه الاعدادت في المتصفح (اسم الترميز المستخدم لهذه الصفحة)
كما تلاحظ باستخدام المتصفح وجدنا ان الترميز هو Windows-1256 ،
وهناك مواقع تستطيع الكشف عن الـ Encoding للملف الذي ترسله لها ، ويمكنك كتابه برنامج هكذا ان احببت ايضاً.
طبعاً المتصفح عرف الترميز الصحيح لأنه يستخدم خوارزميات لمعرفة نوع الترميز المستخدم في الملف حتى يقوم بعرضه
وسوف تجد أنه تمكن من ذلك بشكل صحيح.
بعد ذلك يجب ان تعلم أن برنامج الـ Notepad ليس به خوارزميات متقدمة مثل البرامج الأخرى كالمتصفح ،
فعندما يقوم بقرائه اي ملف فانه يحاول معرفة الـ Encoding له
وفي حال تعرف على الـ Encoding يقوم بعرضه
وسوف يظهر كما انشئه صاحب الملف،
أما في حال أنه لم يتعرف على الملف فسوف يقوم بترميزه باستخدام الـ Default Locale في النظام.
والـ Notepad فقط يستطيع التعرف على UTF-8 و UTF-16
(أغلب برامج الويندوز تطلق عليه Unicode) و ANSI
(والذي هو عباره عن الترميز الافتراضي لديك في النظام).
نعود لمثالنا السابق، كان الملف ترميزه هو Windows-1256
والـ Notepad لا يستطيع فهم هذا الترميز فسوف يلجاً مباشره الى النظام
ويجلب الـ ANSI (أي الـ Default Locale Encoding) ويقوم بعرضه..
للنظر اذاً للDefault Locale على جهازي:
كما هو واضح الان، الـ Default هو اللغه الانجليزية
وهكذا يعني أن الـ Notepad سوف يعرض اي ملف مكتوب باستخدام ال Windows-1256
(وأي Encoding أخر لم يستطيع التعرف عليه)
باستخدام الـ Windows-1252 ولذلك سوف يظهر بشكل خاطئ.
لكن في حال أن الـ Default Locale لديك هو عربي سوف يظهر النص بلا مشاكل على الاطلاق
(حيث يتم ترميزه باستخدام ال Windows-1256
وهو الافتراضي لكل الملفات النصية غير القابلة لمعرفة ترميزها..
والملف سوف يعمل طبعاً لأنه كتب بنفس الترميز الذي عرض به)
اذاً الحل المتقرح هو بتحويل الـ Locale في جهازك الى العربي وسوف يعمل معك..
وطبعاً هذا هو الحل المنتشر في اغلب المنتديات
وهو الحل المعروف للجميع والذي كانت أغلب الاجابات حوله،
ولكن هل حقاً هو حل جيد ؟
كل هذه الأمور تجعل حل تغيير الـ Locale
هو غير فعال خصوصاً للمبرمجين أو الناشرين للكتب والملفات الرقمية…
اذا ما هو الحل الصحيح في مثل هذا الأمر ؟
يجب عليك أن تحول الملف الى الـ Unicode حتى يعمل على جميع الاجهزه ،
و كما شاهدنا انه عندما قمت بالتحويل مباشره من الـ ANSI (الذي كان Windows-1252 ) الى UTF-8 حصلت على مشكلة في المخرج
وهنا كان مكمن السؤال، لأنه قبل أن تحول النص لترميز جديد يجب أن يكون ذلك الملف بالترميز الصحيح،
ولذلك عليك بتحويل الملف الى الترميز الصحيح اولاً والذي هو Windows-1256
وبعد ذلك سوف تحصل على النص العربي ومن ثم تقوم بتحويله الـ UTF-8
وسوف تحصل على النص العربي الذي يعمل على جميع الأجهزه بغض النظر عن الـ Locale.
تستطيع ذلك من خلال طرق كثيرة مثلاً:
فتح الملف من خلال المتصفح ،
ومن ثم نسخ النص من المتصفح ووضعه على النوت باد ثم حفظ باسم وحدد الـ UTF-8
أو من خلال الـ Notepad++ هي أن تحول الترميز الـ Windows-1256
واحفظ الملف ثم حوله بعد ذلك الى UTF-8 من خلال قائمة Encoding.
اذا لم تحول الملف الى UTF-8 بعد أن حولته ال Windows-1256
وقمت بحفظ الملف، فعندما تفتحه مره اخرى بال Notepad فلن يظهر بشكل صحيح لأن ال Notepad لا يعرف هذا الترميز
وسوف يقرأ ال Locale من النظام واذا كان انجليزي فسوف تحصل على النص خاطئ ايضاً.
قد تتسائل الان لماذا صاحب الملف لم ينتبه لهذا الأمر ، السبب مرة اخرى هو ال أن برنامج النوت باد بدائي حقيقة
وانه عندما تحفظ الملف ب ANSI فالترميز سوف يكون بناء على الـ Locale الموجودة لديك في النظام :
وقام بعمل الملف وحفظه على ANSI وشاهده بعد الحفظ
وقام بنشره مطمئناً والحقيقة المرة أنه لن يعمل الا على الـ Arabic Local Machines
وسوف تراه بهذا الشكل عندما يكون جهازك English Locale.
الخلاصه:
----
----
م/ن
شكرا اخي العزيز وجدي عصام ماقصرت
بيض الله وجهك
من المصدر
---
رابط تحميل البرنامج نوت باد
---
درس مهمه جدا
حل مشكلة اللغة العربية في النوت باد
(كيف يحلها المبرمج)
إن الحديث عن موضوع الـ Unicode والـ Encoding
يعتبر من الأساسيات الضرورية Fundamental Concepts لأي مبرمج ومهندس برمجيات،
واكمالاً لسلسه
(أساسيات يجب أن يعرفها اي مبرمج)
فقد طرحنا سؤالاً عن مشكلة عامه نراها كثيراً بشكل دوري الا
وهي أن النص العربي لا يظهر بشكل مقروء عند فتحه في الـ Notepad
وقد تم أخذ مثال من الموسوعة الشاملة (وهي تتكون من ملفات txt كثيرة)،
وكانت هذه الجزئية من الملف هي ال test case لسؤالنا (حمله من هنا) :
كما هو واضح من الصورة أن النص غير مقروء عند فتحه على الجهاز
وهناك مشكلة في الترميز وتحتاج لاصلاح
السؤال الذي سنجيب عليه لماذا ظهر الملف هكذا عند فتحه
وكيف يمكن اصلاحه وارجاعه الى نص مقروء ؟
الحل الذي ارسله أكثر المبرمجين ينطوي تحت كلمة Unicode
وأنه يجب أن يتم تحويل الملف الى UTF-8
حتى يتم اصلاح الملف وارجاعه الى الصيغه الأصلية..
لنرى هذه الحلول وكيف أنها قد لا تحل المشكلة:
تحويل ترميز الملف باستخدام الـ Notepad كما تلاحظ نفس المخرج بالضبط بعد تحويله لـ UTF-8:
وبنفس الفكرة هنا بعد ترميز الملف ب UTF-8 باستخدام Notepad++ أو اي طريقة اخرى ستجد نفس المخرج
ملاحظة: في حال ظهر الملف بعد تحميله بشكل صحيح
وبعد تغيير ال Encoding بأحد الطرق السابقة سوف يظهر بشكل صحيح
وذلك لأنك تستخدم نظام لغته الافتراضيه هي العربية Default Locale is Arabic
ولذلك فلن تلاحظ هذه المشكلة
وستجد الملف باللغه العربية الصحيح، لكن يمكنك القرائه في الموضوع
حتى تعرف سبب المشكلة خصوصاً انها كانت بسبب شخص لديه نفس اعداداتك.
اذاً ما هو الحل اذا لم يظهر النص بشكل صحيح؟
في مثل هذه المسائل عليك بمعرفة نوع الترميز الذي استخدم في انشاء الملف، هناك طرق كثيرة مثلاً :
رمي الملف على المتصفح وسوف يحاول المتصفح معرفة الترميز بنفسه
وسوف تجده من قائمه الاعدادت في المتصفح (اسم الترميز المستخدم لهذه الصفحة)
كما تلاحظ باستخدام المتصفح وجدنا ان الترميز هو Windows-1256 ،
وهناك مواقع تستطيع الكشف عن الـ Encoding للملف الذي ترسله لها ، ويمكنك كتابه برنامج هكذا ان احببت ايضاً.
طبعاً المتصفح عرف الترميز الصحيح لأنه يستخدم خوارزميات لمعرفة نوع الترميز المستخدم في الملف حتى يقوم بعرضه
وسوف تجد أنه تمكن من ذلك بشكل صحيح.
بعد ذلك يجب ان تعلم أن برنامج الـ Notepad ليس به خوارزميات متقدمة مثل البرامج الأخرى كالمتصفح ،
فعندما يقوم بقرائه اي ملف فانه يحاول معرفة الـ Encoding له
وفي حال تعرف على الـ Encoding يقوم بعرضه
وسوف يظهر كما انشئه صاحب الملف،
أما في حال أنه لم يتعرف على الملف فسوف يقوم بترميزه باستخدام الـ Default Locale في النظام.
والـ Notepad فقط يستطيع التعرف على UTF-8 و UTF-16
(أغلب برامج الويندوز تطلق عليه Unicode) و ANSI
(والذي هو عباره عن الترميز الافتراضي لديك في النظام).
نعود لمثالنا السابق، كان الملف ترميزه هو Windows-1256
والـ Notepad لا يستطيع فهم هذا الترميز فسوف يلجاً مباشره الى النظام
ويجلب الـ ANSI (أي الـ Default Locale Encoding) ويقوم بعرضه..
للنظر اذاً للDefault Locale على جهازي:
كما هو واضح الان، الـ Default هو اللغه الانجليزية
وهكذا يعني أن الـ Notepad سوف يعرض اي ملف مكتوب باستخدام ال Windows-1256
(وأي Encoding أخر لم يستطيع التعرف عليه)
باستخدام الـ Windows-1252 ولذلك سوف يظهر بشكل خاطئ.
لكن في حال أن الـ Default Locale لديك هو عربي سوف يظهر النص بلا مشاكل على الاطلاق
(حيث يتم ترميزه باستخدام ال Windows-1256
وهو الافتراضي لكل الملفات النصية غير القابلة لمعرفة ترميزها..
والملف سوف يعمل طبعاً لأنه كتب بنفس الترميز الذي عرض به)
اذاً الحل المتقرح هو بتحويل الـ Locale في جهازك الى العربي وسوف يعمل معك..
وطبعاً هذا هو الحل المنتشر في اغلب المنتديات
وهو الحل المعروف للجميع والذي كانت أغلب الاجابات حوله،
ولكن هل حقاً هو حل جيد ؟
- ماذا اذا كنت تكتب برنامج وتريد ان يعمل على مستخدمين في مناطق متوزعه ؟
- ماذا اذا كتبت ملف Read-me أو help وأردت نشره لأكثر من 10000 مستخدم ؟
- هل ستطلب منهم جميعهم تحويل ال Locale ؟
- ماذا اذا كان المستخدم لا يوجد لديه Locale عربي في جهازه ؟
كل هذه الأمور تجعل حل تغيير الـ Locale
هو غير فعال خصوصاً للمبرمجين أو الناشرين للكتب والملفات الرقمية…
اذا ما هو الحل الصحيح في مثل هذا الأمر ؟
يجب عليك أن تحول الملف الى الـ Unicode حتى يعمل على جميع الاجهزه ،
و كما شاهدنا انه عندما قمت بالتحويل مباشره من الـ ANSI (الذي كان Windows-1252 ) الى UTF-8 حصلت على مشكلة في المخرج
وهنا كان مكمن السؤال، لأنه قبل أن تحول النص لترميز جديد يجب أن يكون ذلك الملف بالترميز الصحيح،
ولذلك عليك بتحويل الملف الى الترميز الصحيح اولاً والذي هو Windows-1256
وبعد ذلك سوف تحصل على النص العربي ومن ثم تقوم بتحويله الـ UTF-8
وسوف تحصل على النص العربي الذي يعمل على جميع الأجهزه بغض النظر عن الـ Locale.
تستطيع ذلك من خلال طرق كثيرة مثلاً:
فتح الملف من خلال المتصفح ،
ومن ثم نسخ النص من المتصفح ووضعه على النوت باد ثم حفظ باسم وحدد الـ UTF-8
أو من خلال الـ Notepad++ هي أن تحول الترميز الـ Windows-1256
واحفظ الملف ثم حوله بعد ذلك الى UTF-8 من خلال قائمة Encoding.
حل مشكلة اللغة العربية في النوت باد بخطوات بسيطة:
اذا لم تحول الملف الى UTF-8 بعد أن حولته ال Windows-1256
وقمت بحفظ الملف، فعندما تفتحه مره اخرى بال Notepad فلن يظهر بشكل صحيح لأن ال Notepad لا يعرف هذا الترميز
وسوف يقرأ ال Locale من النظام واذا كان انجليزي فسوف تحصل على النص خاطئ ايضاً.
قد تتسائل الان لماذا صاحب الملف لم ينتبه لهذا الأمر ، السبب مرة اخرى هو ال أن برنامج النوت باد بدائي حقيقة
وانه عندما تحفظ الملف ب ANSI فالترميز سوف يكون بناء على الـ Locale الموجودة لديك في النظام :
- اذا كان الـ Locale لديك عربي قم بفتح ملف Notepad
- واكتب اي نص عربي وقم بالتخزين بترميز ANSI (عن طريق الحفظ Save)
- سوف تجد أن عمل الملف بشكل عادي في جهازك بدون أي تحذير من البرنامج
- لكن اذا كان الـ Locale انجليزي فسوف تأتيك رساله تحذير بأن الملف به أحرف ليست ANSI
- وانه يتوجب عليك الحفظ بال Unicode.
وقام بعمل الملف وحفظه على ANSI وشاهده بعد الحفظ
وقام بنشره مطمئناً والحقيقة المرة أنه لن يعمل الا على الـ Arabic Local Machines
وسوف تراه بهذا الشكل عندما يكون جهازك English Locale.
الخلاصه:
- قبل تحويل الترميز في الملف يجب ارجاع الملف لأصله وبعدها قم بالترميز والا سيخرب الملف
- لا تخزن ملف نصي بصيغه Windows-1256 والا فلن يعمل على الأنظمة التي بها English Locale
- اجعل برنامجك يتعامل مع الـ Unicode ولا تتعامل مع الـ Default Locale في جهازك فقط فقد يختلف عن المستخدمين
- عندما تتعامل مع مشاكل الـ Unicode لا تستعجل بطرح حل قبل ان تفهم المشكلة جيداً وتعرف مسبباتها
----
----
م/ن
شكرا اخي العزيز وجدي عصام ماقصرت
بيض الله وجهك
من المصدر
---
Download Notepad++ v8.6.2
رابط تحميل البرنامج نوت باد
---
كتابة حالات الاختبار
----درس مهمه جدا
المرفقات
التعديل الأخير: