UTF8 مقابل.UTF16 مقابل.شار* مقابل.ماذا؟أحد يشرح لي هذه الفوضى!

StackOverflow https://stackoverflow.com/questions/172133

سؤال

لقد تمكنت في الغالب من تجاهل كل هذه العناصر ذات الأحرف متعددة البايت، لكنني الآن بحاجة إلى القيام ببعض أعمال واجهة المستخدم وأعلم أن جهلي في هذا المجال سوف يلحق بي!هل يمكن لأي شخص أن يشرح في بضع فقرات أو أقل ما أحتاج إلى معرفته حتى أتمكن من توطين تطبيقاتي؟ما هي الأنواع التي يجب أن أستخدمها (أستخدم كلاً من .Net وC/C++، وأحتاج إلى هذه الإجابة لكل من Unix وWindows).

هل كانت مفيدة؟

المحلول

تحقق من جويل سبولسكي الحد الأدنى المطلق الذي يجب أن يعرفه كل مطور برامج بشكل مطلق وإيجابي عن Unicode ومجموعات الأحرف (بدون أعذار!)

تحرير 20140523:أيضا، شاهد الشخصيات والرموز ومعجزة اليونيكود بقلم توم سكوت على YouTube - مدته أقل من عشر دقائق، وشرح رائع لـ "الاختراق" الرائع وهو UTF-8

نصائح أخرى

يتكون ترميز الأحرف من سلسلة من الرموز التي يبحث كل منها عن رمز من مجموعة أحرف معينة.يرجى الاطلاع على هذه المادة الجيدة على ويكيبيديا على ترميز الأحرف.

UTF8 (UCS) يستخدم 1 إلى 4 بايت لكل رمز. ويكيبيديا يعطي ملخصًا جيدًا لكيفية عمل المتهدمة متعددة البايت:

  • دائمًا ما يكون الجزء الأكثر أهمية من الحرف أحادي البايت هو 0.
  • تحدد أجزاء البتات الأولى من البايت الأول لتسلسل متعدد البايت طول التسلسل.هذه البتات الأكثر أهمية هي 110 لتسلسل ثنائي البايت.1110 للتسلسل ثلاثة بايت ، وهلم جرا.
  • البايتات المتبقية في تسلسل متعدد البتات لها 10 أجزاء البتات.
  • لا يحتوي دفق UTF-8 على البايت FE أو FF.هذا يتأكد من أن دفق UTF-8 لا يبدو وكأنه دفق UTF-16 يبدأ بـ U+FEFF (علامة ترتيب بايت)

تعرض لك الصفحة أيضًا مقارنة رائعة بين مزايا وعيوب كل نوع من أنواع ترميز الأحرف.

UTF16 (UCS2)

يستخدم 2 بايت إلى 4 بايت لكل رمز.

UTF32 (UCS4)

يستخدم 4 بايت دائمًا لكل رمز.

شار يعني فقط بايت من البيانات وليس ترميزًا فعليًا.إنه ليس مشابهًا لـ UTF8/UTF16/ascii.يمكن أن يشير مؤشر char* إلى أي نوع من البيانات وأي تشفير.

المحكمة الخاصة بلبنان:

لم يتم تصميم كل من STL's Std :: WSTRING و Std :: String لتشفيرات الأحرف المتغيرة الطول مثل UTF-8 و UTF-16.

كيفية التنفيذ:

ألق نظرة على مكتبة Iconv. iconv هي مكتبة قوية لتحويل ترميز الأحرف تستخدمها مشاريع مثل libxml (محلل XML C لـ Gnome)

موارد رائعة أخرى حول ترميز الأحرف:

يشير

تلقيت الحكمة أن يخطئ المادة Spolsky ل بضع نقاط مهمة.

وينصح هذه المقالة بأنها أكثر اكتمالا: وUnicode® قياسي: مقدمة الفني

وهذه المادة هي أيضا مقدمة جيدة: يونيكود أساسيات

وهذا الأخير على وجه الخصوص يعطي لمحة عامة عن أشكال ترميز الأحرف ومخططات ليونيكود.

والمعايير UTF مختلفة من الطرق لتشفير "نقاط الترميز". A التمثيل البرمجي هو مؤشر إلى مجموعة charater يونيكود.

وترميز آخر هو UCS2 وهو لل Allways 16BIT، وبالتالي لا يدعم مجموعة الكامل يونيكود.

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

وبمقارنة سلسلتين يونيكود وبالتالي يتطلب تطبيع للحصول على تمثيل قانوني قبل المقارنة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top