Introduction to Unicode and UTF-8

Unicode is an industry standard for consistent encoding of written text. Learn the basics and most important parts of it, in particular concerning UTF-8

Unicode هومعيار صناعي للترميز المتسق للنص المكتوب.

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

هدفها هو توفير رقم فريد لتحديد كل حرف لكل لغة ، على أي منصة.

يعيّن Unicode كل حرف إلى رمز معين يسمىنقطة الرمز. تأخذ نقطة الرمز شكلU+<hex-code>، تتراوح منU+0000إلىU+10FFFF.

مثال على نقطة الكود تبدو كالتالي:U+004F. يعتمد معناه على ترميز الأحرف المستخدم.

يعرّف Unicode مختلفترميز الأحرف، أكثرها استخدامًا هي UTF-8 و UTF-16 و UTF-32.

UTF-8 هو بالتأكيد الترميز الأكثر شيوعًا في عائلة Unicode ، خاصةً على الويب. هذه الوثيقة مكتوبة في UTF-8 ، على سبيل المثال.

يوجد حاليًا أكثر من 135.000 حرفًا مختلفًا تم تنفيذه ، بمساحة تزيد عن 1.1 مليون.

نصوص

يتم تجميع جميع أحرف Unicode المدعومة في أقسام تسمىنصوص.

يوجد نص لكل مجموعة أحرف مختلفة:

  • لاتيني (يحتوي على جميع أحرف ASCII + جميع شخصيات العالم الغربي الأخرى)
  • الكورية
  • المجرية القديمة
  • اللغة العبرية
  • اليونانية
  • أرميني
  • …وهكذا!

يتم تحديد القائمة الكاملة فيمعيار ISO 15924.

شاهد المزيد عن البرامج النصية:https://en.wikipedia.org/wiki/Script_(Unicode)

طائرات

بالإضافة إلى البرامج النصية ، هناك طريقة أخرى ينظم بها Unicode أحرفه:طائرات.

بدلاً من تجميعها حسب النوع ، يتحقق من قيمة نقطة الرمز:

طائرة نطاق
0 U + 0000 - U + FFFF
1 U + 10000 - U + 1FFFF
2 U + 20000 - U + 2FFFF
... ...
14 U + E0000 - U + EFFFF
15 U + F0000 - U + FFFFF
16 U + 100000 - U + 10FFFF

يوجد 17 طائرة.

الأول خاص ، يطلق عليهالمستوى الأساسي متعدد اللغات، أوBMP، ويحتوي على معظم الشخصيات والرموز الحديثة ، من الأبجديات اللاتينية والسيريلية واليونانية.

تم استدعاء الطائرات الـ 16 الأخرىطائرات نجمي. جدير بالذكر أن الطائرات من 3 إلى 13 خالية حاليًا.

تسمى نقاط الكود الموجودة في الطائرات النجميةنقاط رمز نجمي.

نقاط رمز نجمي هي جميع النقاط أعلى منU+10000.

وحدات الكود

يتم تخزين نقاط الرمز داخليًا على هيئةوحدات الكود. وحدة الكود هي تمثيل بت للحرف ، ويختلف طولها حسب ترميز الحرف

يستخدم UTF-32 وحدة رمز 32 بت.

يستخدم UTF-8 وحدة رمز 8 بت ، ويستخدم UTF-16 وحدة رمز 16 بت. إذا احتاجت نقطة الرمز إلى حجم أكبر ، فسيتم تمثيلها بوحدتي رمز (أو أكثر ، في UTF-8).

حروف حروف

الخط العربي هو رمز يمثل وحدة من نظام الكتابة. إنها في الأساسفكرتكذات طابع وكيف ينبغي أن تبدو.

الحروف الرسومية

الحرف الرسومي هو تمثيل رسومي للحرف: كيف يتم عرضه بصريًا على الشاشة ، والمظهر الفعلي على الشاشة.

التسلسلات

يتيح لك Unicode الجمع بين أحرف مختلفة لتشكيل حرف حرف.

على سبيل المثال ، إنها حالة الأحرف المحركة: الحرفéيمكن التعبير عنها باستخدام مزيج من الحرفe(U+0065) وحرف unicode المسمى "COMBINING ACUTE ACCENT" (U+0301):

"U+0065U+0301" ➡️ "é"

U+0301في هذه الحالة هو ما يوصف بأنه أالجمع بين العلامة، حرف واحد ينطبق على الحرف السابق ليشكل حرفًا مختلفًا.

تطبيع

يمكن تمثيل الأحرف أحيانًا باستخدام مجموعات مختلفة من نقاط الرمز.

على سبيل المثال ، إنها حالة الأحرف المحركة: الحرفéيمكن التعبير عنها على حد سواءU+00E9وكذلك الجمعe(U+0065) وحرف unicode المسمى "COMBINING ACUTE ACCENT" (U+0301):

U+00E9       ➡️ "é"
U+0065U+0301 ➡️ "é"

تحلل عملية التطبيع سلسلة لهذا النوع من الغموض ، وتولد سلسلة مع التمثيل المتعارف عليه لأي حرف.

بدون التطبيع ، سيتم اعتبار السلاسل المتساوية تمامًا للعين مختلفة لأن تمثيلها الداخلي يتغير:

إموجيس

Emojis عبارة عن أحرف نجمية Unicode ، وهي توفر طريقة للحصول على صور على شاشتك دون وجود صور حقيقية ، فقط صور رسومية للخط.

على سبيل المثال ، يتم ترميز الرمز كـU+1F436.

أول 128 حرفًا

أول 128 حرفًا من Unicode هي نفس مجموعة أحرف ASCII.

أول 32 حرفًا ،U+0000-U+001F(0-31) تسمىرموز التحكم.

هم ميراث من الماضي ومعظمهم قد عفا عليه الزمن الآن. تم استخدامها في آلات الطباعة عن بعد ، وهو شيء كان موجودًا قبل الفاكس.

تحتوي الأحرف من U + 0020 (32) إلى U + 007E (126) على أرقام وحروف وبعض الرموز:

يونيكود كود ASCII رسومي
U + 0020 32 (الفراغ)
U + 0021 33 !
U + 0022 34 "
U + 0023 35 #
U + 0024 36 $
U + 0025 37 ٪
U + 0026 38 &
U + 0027 39 "
U + 0028 40 (
U + 0029 41 )
U + 002A 42 *
ش + 002 ب 43 +
U + 002C 44 و
U + 002D 45 -
U + 002E 46 .
U + 002F 47 /
U + 0030 48 0
U + 0031 49 1
U+0032 50 2
U+0033 51 3
U+0034 52 4
U+0035 53 5
U+0036 54 6
U+0037 55 7
U+0038 56 8
U+0039 57 9
U + 003A 58 :
ش + 003 ب 59 ؛
U + 003C 60 <
ش +003 د 61 =
U + 003E 62 >
U + 003F 63 ؟
U+0040 64 @
U+0041 65 أ
U+0042 66 ب
U+0043 67 ج
U+0044 68 د
U+0045 69 ه
U+0046 70 F
U+0047 71 جي
U+0048 72 ح
U+0049 73 أنا
U + 004A 74 ي
ش + 004 ب 75 ك
U + 004C 76 إل
ش + 004 د 77 م
U + 004E 78 ن
U + 004F 79 ا
U+0050 80 ص
U+0051 81 س
U+0052 82 ر
U+0053 83 س
U+0054 84 تي
U+0055 85 يو
U+0056 86 الخامس
U+0057 87 دبليو
U+0058 88 X
U+0059 89 ص
U + 005A 90 ض
ش + 005 ب 91 [
U + 005C 92
ش +005 د 93 ]
U + 005E 94 ^
U + 005F 95 _
U+0060 96 "
U+0061 97 أ
U+0062 98 ب
U+0063 99 ج
U+0064 100 د
U+0065 101 ه
U+0066 102 F
U+0067 103 ز
U+0068 104 ح
U+0069 105 أنا
U + 006A 106 ي
يو +006 ب 107 ك
U + 006C 108 ل
ش + 006 د 109 م
U + 006E 110 ن
U + 006F 111 س
U+0070 112 ص
U+0071 113 ف
U+0072 114 ص
U+0073 115 س
U+0074 116 ر
U+0075 117 ش
U+0076 118 الخامس
U+0077 119 ث
U+0078 120 x
U+0079 121 ذ
U + 007A 122 ض
ش + 007 ب 123 {
U + 007C 124
ش + 007 د 125 }
U + 007E 126 ~
  • الأرقام منU+0030إلىU+0039
  • الأحرف الكبيرة تذهب منU+0041إلىU+005A
  • الأحرف الصغيرة منU+0061إلىU+007A

U + 007F (127) هو حرف الحذف.

كل ما يتم المضي قدمًا هو خارج نطاق ASCII ، وهو جزء من Unicode حصريًا.

يمكنك العثور على القائمة الكاملة على ويكيبيديا:https://ar.wikipedia.org/wiki/List_of_Unicode_characters

ترميزات يونيكود

UTF-8

UTF-8 هو ترميز أحرف متغير العرض ، ويمكنه ترميز كل حرف يغطيه Unicode ، باستخدام من 1 إلى 4 8 بايت بايت.

تم تصميمه في الأصل بواسطة Ken Thompson و Rob Pike في عام 1992. هذه الأسماء مألوفة لأولئك الذين لديهم أي اهتمام بلغة برمجة Go ، حيث كانا من المبدعين الأصليين لذلك أيضًا.

يوصى به W3C باعتباره الترميز الافتراضي في ملفات HTML ، وتشير الإحصائيات إلى أنه يُستخدم في 91،3٪ من جميع صفحات الويب ، اعتبارًا من أبريل 2018.

في وقت تقديمه ، كان ASCII هو ترميز الأحرف الأكثر شيوعًا في العالم الغربي. في ASCII ، تم تخصيص رقم وهذا الرقم لجميع الأحرف والأرقام والرموز. نظرًا لكونه ثابتًا على 8 بتات ، يمكن أن يمثل 255 حرفًا كحد أقصى ، وكان ذلك كافياً.

تم تصميم UTF-8 ليكون متوافقًا مع الإصدارات السابقة مع ASCII. كان هذا مهمًا جدًا لاعتماده ، حيث كان ASCII أقدم بكثير (1963) وواسع الانتشار ، والانتقال إلى UTF-8 جاء بشفافية تقريبًا.

يتم تعيين أول 128 حرفًا من UTF-8 بالضبط إلى ASCII. لماذا 128؟ لأن ASCII يستخدم ترميز 7 بت ، والذي يسمح بما يصل إلى 128 تركيبة. لماذا 7 بتات؟ نحن الآن نأخذ 8 بت كأمر مسلم به ، ولكن في اليوم الذي تم فيه تصميم ASCII ، كانت أنظمة 7 بت شائعة أيضًا.

كونه متوافقًا بنسبة 100٪ مع ASCII يجعل UTF-8 أيضًا فعالًا للغاية ، لأن الأحرف الأكثر استخدامًا في اللغات الغربية يتم ترميزها بـ 1 بايت فقط.

هنا خريطة استخدام البايت:

عدد البايت بداية نهاية
1 U+0000 U+007F
2 U+0080 U+07FF
3 U+0800 U+FFFF
4 U+10000 U+10FFFF

تذكر أنه في ASCII تم تشفير الأحرف كأرقام؟ إذا كانت الرسالةAفي ASCII تم تمثيله مع الرقم65، باستخدام UTF-8 يتم ترميزه على أنهU+0041.

لم لاU+0065أنت تسأل؟ حسنًا ، لأن unicode يستخدم قاعدة سداسية عشرية ، وبدلاً من10لديكU+000Aوهكذا (بشكل أساسي ، لديك مجموعة من 16 رقمًا بدلاً من 10)

ألق نظرة علىهذا الفيديو، وهو ما يفسر ببراعة توافق UTF-8 و ASCII.

UTF-16

UTF-16 هو ترميز Unicode شائع جدًا. على سبيل المثال ، إنها الطريقة التي تمثل بها Java داخليًا أي حرف. انها أيضاأحد الترميزين اللذين تستخدمهما JavaScript داخليًا، معUCS-2. يتم استخدامه من قبل العديد من الأنظمة الأخرى أيضًا ، مثل Windows.

UTF-16 هو نظام تشفير متغير الطول ، مثل UTF-8 ، ولكنه يستخدم 2 بايت (16 بت) كحد أدنى لتمثيل أي حرف. على هذا النحو ، فهو غير متوافق مع معيار ASCII.

يتم تخزين نقاط التعليمات البرمجية في المستوى الأساسي متعدد اللغات (BMP) باستخدام 2 بايت. نقاط الرمز فيطائرات نجمييتم تخزينها باستخدام 4 بايت.

UTF-32

يستخدم UTF-8 بايت واحد كحد أدنى ، ويستخدم UTF-16 ما لا يقل عن 2 بايت.

يستخدم UTF-32 دائمًا 4 بايت ، دون تحسين لاستخدام المساحة ، وبالتالي فإنه يهدر الكثير من عرض النطاق الترددي.

هذا القيد يجعل تشغيله أسرع لأن لديك أقل للتحقق منه ، حيث يمكنك افتراض 4 بايت لجميع الأحرف.

إنها ليست شائعة مثل UTF-8 و UTF-16 ، لكن لها تطبيقاتها.


المزيد من دروس js: