بسم الله الرحمن الرحيم الحمدالله رب العالمن والصلاة والسلام على سيد المرسلين وعلى آله وصحبه أجمعين اما بعد : بما ان Qt مكتبة عالمية بدون تحيز للغة على اخرى فأعطت العربية حقها واللغات الأخرى حقها فكان يجب علينا شرح كيف نستغل هذه الظروف المحاطة ل Qt وننتقل اليها كمكتبة لكل العرب . سوف اتطرق اعزائي في هذا الفصل الى موضوع الترميز في Qt وبما ان هذا الموضوع ذو اهمية كبيرة فكان يجب عليك ان تعرف كيف تتعامل معه قبل ان تنتج مشاريع متعددة اللغات : والمتوقع ان تخرج به في هذا المقال التالي : 1-الفرق بين Qstring و QbyteArray 2-كيف تقوم بتحويل ترميز اليونيكود الى ترميز آخر والعكس صحيح 3-هل يمكنك تغيير الخصائص الترميزية للصفين وكيف ؟ 4-كيف تحدد ترميز المخرجات والمدخلات ؟ جميع هذه الأسئلة يتوقع تستطيع الإجابة عليها بعد قراءتك للفصل . مالفرق بينQstring و QbyteArray ؟ الأولى هي عبارة عن مصفوفة من Qchar وهو بدوره عبارة عن ushort من هذا كله نستنتج ان ان Qstring تعتمد في ترميزها على ال unicode مالم تغير انت ترميزها وهو ماسوف نتطق اليه في مواضيع أخرى داخل الفصل وإختصارا لعملها قامت Qt بإنشاء دالة داخل Qobject تقوم بتحويل محتوى النص الى unicode في حال فتحك لعمل وكتبت نصك بداخل العمل فإنه بشكله الطبيعي هو ترميز ascii ولكن عند إحاطته ب Qobject::tr("") فإنه يتم تحويله الى اليونيكود دون الضرورة لضمه ل Qstring وإن كان مرفق بالمشروع ملف ترجمة فإنه يقوم بترجمته وهذه الدالة كما ترى public static بإمكانك استدعاءها بدون الحاجة لإستدعاء الصف داخل الدالة main ثم ننتلق الى الطرف الآخر وهو QbyteArray وهو في الأصل عبارة عن مصفوفة من char ترميز ascii وهذا الصف مناسب لتخزين معلومات البرنامج و الصور و غيرها من الملفات الثنائية . كيف نحول من ترميز الى ترميز ؟ الصف Qstring يستطيع ان يقوم بعملية التحويل بشكل مباشر عن طريق دواله التي يحويها فمثلا الصف Qstring يحوي اوامر مثل toAscii و toUtf8 بالرغم من انه يونيكود الا انه يأخذ بايت واحد فقط لذلك يستطيع QbyteArray ان يحويه وكذلك الأخير له اوامر تحويل وسوف تتعرف أكثر في الجانب العملي من الفصل . وهناك صفوف تحويل اخرى مثل QTextEncoder و QTextDecoder وسوف نتحدث عنهم في وقت آخر من الفصل . هل يمكنك تغيير الخصائص الترميزية للصفين وكيف ؟ نعم في الحقيقة قامت Qt بإنشاء صف خاص للترميز وهو QtextCodec هذا الصف يعتبر هو الحاوي لجميع اشكال الترميزات وأين يتم تركيبها و .. و.. . فلذلك هو يحوي أوامر في غاية الأهمية مثل :- setCodecForTr وهي تغيير ترميز ال Qobject::tr . codecForLocale وهو يعتمد على النظام في تحديد الترميز المستخدم . setCodecForCStrings تحدد الترميز المستخدم في Qstring . fromUnicode وهي تحول من اليونيكود الى ascii وتنتج لك مصفوفة QbyteArray . codecForName وتحدد الترميز بالترميز الذي تراه مناسبا لعملك . وهناك دوال التحويل من ال unicode الى ترميز آخر ودوال تقوم بتحدد ترميز html وجدول عن أهم الترميزات المدعمة عموما راجع ملف المساعدة في Qt لتعرف أكثر . وهناك صفوف اخرى تعمد على مؤشرات من الصف QtextCodec وهي QTextEncoder و QtextDecoder الأول يقوم بالتحويل من اليوني كود والثاني الى اليونيكود . كيف تحدد ترميز المخرجات والمدخلات ؟ في الصف QtextStream توجد هناك دوال لتحديد ترميز المخرجات وتوجد تقنيات تم توفيرها حديثا في اليونيكود Byte Order Mark (BOM) والأوامر هي : setCodec وهي اما ان تأخذ مؤشر ل QtextCodec او اسم الترميز مباشرة ويفض من وجهة نظري استخدام codecForLocale . setAutoDetectUnicode وهي تستخدم تقنية bom نفترض لو أنك اردت أخذ بيانات من ملف او ارسالها فإن الحروف التي ترسل قد لاتتوفر في الترميز المطلوب في هذه الحالة يتم بالإستعانة ب utf-16 للبحث عن الرمز فإن وجده يتم تحويله الى النمط utf-16 ويسجله. generateByteOrderMark وتعيد القيمة true اذا كنت تعتمد على استخدام utf-16(BOM) . وتقنية BOM تعتمد على MSB فالملف النص قد يستخدم big endian or litel endian وأنت في الحقيقة لا تعرف ولكن BOM يستطيع ان يعرف ويتعامل معها بالشكل المناسب في حديثنا كله عن هذه التقنية يشترط ان تستخدم مع الدالة setCodec تشفير يونيكود وإلا لن تعمل معك هذه التقنية . ولمزيد من المعلومات عن اليونيكود زر الموقع الرسمي لهم www.unicode.org في المقال القادم سوف نتعرف 1-ملفات الترجمة 2-التعرف على اداة Qt linguist 3-التعرف على الصف translator