UTF-16
UTF-16 ( تنسيق تحويل يونيكود ذو 16 بت ) هو ترميز أحرف يدعم جميع نقاط الترميز الصالحة في يونيكود، والبالغ عددها 1,112,064 نقطة. [ 1 ] يتميز هذا الترميز بطول متغير، حيث تُرمّز نقاط الترميز بوحدة ترميز واحدة أو وحدتين من وحدات الترميز ذات 16 بت . نشأ UTF-16 من ترميز قديم ذي عرض ثابت من 16 بت، يُعرف الآن باسم UCS-2 (مجموعة الأحرف العالمية ثنائية البايت)، [ 2 ] [ 3 ] وذلك بعد أن اتضح الحاجة إلى أكثر من 2^ 16 (65,536) نقطة ترميز، [ 4 ] بما في ذلك معظم الرموز التعبيرية (الإيموجي) وأحرف CJK المهمة ، مثل تلك المستخدمة في أسماء الأشخاص والأماكن. [ 5 ]
يستخدم نظام التشغيل ويندوز ترميز UTF-16 ، كما تستخدمه العديد من بيئات البرمجة مثل جافا و Qt . وقد أدى اختلاف طول الأحرف في ترميز UTF-16، بالإضافة إلى حقيقة أن معظم الأحرف ليست متغيرة الطول (لذا نادراً ما يتم اختبار خاصية الطول المتغير)، إلى ظهور العديد من الأخطاء البرمجية، بما في ذلك في نظام ويندوز نفسه. [ 6 ]
يُعدّ ترميز UTF-16 الترميز الوحيد (حتى الآن) المسموح به على الويب والذي لا يتوافق مع ترميز ASCII ذي 8 بت . [ 7 ] [ ب ] لم يحظَ هذا الترميز بشعبية واسعة على الويب، حيث يُستخدم في أقل من 0.004% من صفحات الويب العامة (وحتى في هذه الحالة، من المرجح أن تستخدم صفحات الويب أيضًا ترميز UTF-8 ). [ 9 ] في المقابل، هيمن ترميز UTF-8 منذ سنوات، وشكّل 99% من جميع صفحات الويب بحلول عام 2025. [ 10 ] تعتبر مجموعة عمل تقنية تطبيقات النصوص التشعبية على الويب (WHATWG) ترميز UTF-8 "الترميز الإلزامي لجميع النصوص"، وأنه لأسباب أمنية، لا ينبغي لتطبيقات المتصفح استخدام ترميز UTF-16. [ 11 ]

تاريخ
في أواخر ثمانينيات القرن العشرين، بدأ العمل على تطوير ترميز موحد لمجموعة الأحرف العالمية ( UCS ) ليحل محل الترميزات اللغوية السابقة بنظام منسق واحد. كان الهدف هو تضمين جميع الأحرف المطلوبة من معظم لغات العالم، بالإضافة إلى الرموز من المجالات التقنية كالعلوم والرياضيات والموسيقى. وكانت الفكرة الأساسية هي استبدال الترميزات التقليدية المكونة من 256 حرفًا، والتي تتطلب بايتًا واحدًا لكل حرف، بترميز يستخدم 65536 قيمة (2^ 16 )، مما يتطلب بايتين (16 بتًا) لكل حرف.
عملت مجموعتان على هذا الأمر بالتوازي، وهما اللجنة الفنية المشتركة 1/اللجنة الفرعية 2 التابعة لمنظمة ISO/IEC، واتحاد يونيكود ، الذي يُمثل في الغالب مُصنّعي معدات الحوسبة. سعت المجموعتان إلى مُزامنة تخصيصات الأحرف لضمان توافق الترميزات المُطوّرة. سُمّي الترميز الأولي ثنائي البايت "UCS-2". [ 2 ] [ 3 ] [ 12 ]
عندما اتضح جليًا أن 2 ^16 حرفًا لن تكون كافية، [ 13 ] قدم معهد مهندسي الكهرباء والإلكترونيات (IEEE ) مساحة أكبر تبلغ 31 بتًا وتشفيرًا ( UCS-4 ) يتطلب 4 بايتات لكل حرف. وقد عارض اتحاد يونيكود هذا الاقتراح، نظرًا لأن 4 بايتات لكل حرف تُهدر مساحة كبيرة من الذاكرة والقرص، ولأن بعض الشركات المصنعة كانت قد استثمرت بالفعل بكثافة في تقنية 2 بايت لكل حرف. تم تطوير نظام تشفير UTF-16 كحل وسط، وتم تقديمه مع الإصدار 2.0 من معيار يونيكود في يوليو 1996. [ 14 ] وهو مُحدد بالكامل في RFC 2781، الذي نشرته فرقة عمل هندسة الإنترنت (IETF ) عام 2000. [ 15 ] [ 16 ]
تم تحديد ترميز UTF-16 في أحدث إصدارات كلٍ من المعيار الدولي ISO/IEC 10646 ومعيار يونيكود. "يُعتبر ترميز UCS-2 الآن قديمًا. لم يعد يشير إلى أي شكل ترميز في معيار 10646 أو معيار يونيكود." [ 2 ] [ 3 ] لن يتم توسيع ترميز UTF-16 لدعم عدد أكبر من نقاط الترميز أو لدعم نقاط الترميز التي تم استبدالها ببدائل، لأن ذلك سيخالف سياسة استقرار يونيكود فيما يتعلق بنقاط الترميز العامة أو البديلة. [ 17 ] (أي نظام يبقى ترميزًا ذاتي التزامن يتطلب تخصيص نقطة ترميز واحدة على الأقل من المستوى الأساسي متعدد اللغات (BMP) لبدء التسلسل. تغيير غرض نقطة الترميز غير مسموح به.)
وصف
تُشفّر كل نقطة رمز يونيكود إما بوحدة رمز واحدة أو وحدتين من 16 بت . تُشفّر نقاط الرمز الأقل من 2^ 16 (ضمن نطاق BMP) بوحدة رمز واحدة من 16 بت تساوي القيمة العددية لنقطة الرمز، كما في نظام UCS-2 الأقدم. أما نقاط الرمز الأكبر من أو تساوي 2^ 16 (فوق نطاق BMP) فتُشفّر باستخدام وحدتي رمز من 16 بت. تُختار هاتان الوحدتان من نطاق UTF-16 البديل 0xD800–0xDFFF، والذي لم يُخصص سابقًا لأحرف. لا تُستخدم القيم في هذا النطاق كأحرف، ولا يوفر UTF-16 طريقةً صحيحةً لتشفيرها كنقاط رمز فردية. بالتالي، يتكون دفق UTF-16 من رموز مفردة من 16 بت خارج النطاق البديل، وأزواج من قيم 16 بت تقع ضمن النطاق البديل.
من U+0000 إلى U+D7FF ومن U+E000 إلى U+FFFF
يُشفّر كلٌّ من ترميز UTF-16 وترميز UCS-2 نقاط الترميز في هذا النطاق كوحدات ترميز مفردة من 16 بت، وهي متطابقة عدديًا مع نقاط الترميز المقابلة. تُعدّ نقاط الترميز هذه في المستوى الأساسي متعدد اللغات (BMP) هي نقاط الترميز الوحيدة التي يمكن تمثيلها في UCS-2. اعتبارًا من يونيكود 9.0، تقع بعض النصوص الحديثة غير اللاتينية الآسيوية والشرق أوسطية والأفريقية خارج هذا النطاق، وكذلك معظم رموز الإيموجي .
نقاط الترميز من U+010000 إلى U+10FFFF
يتم ترميز نقاط الترميز من المستويات الأخرى كوحدتي ترميز 16 بت تسمى زوجًا بديلًا . الوحدة الأولى هي بديل عالي والثانية هي بديل منخفض (يُعرفان أيضًا باسم البدائل "الرائدة" و"اللاحقة"، على التوالي، على غرار البايتات الرائدة واللاحقة في UTF-8. [ 18 ] ):
قليل عالي | DC00 | DC01 | ... | DFFF |
|---|---|---|---|---|
| D800 | 010000 | 010001 | ... | 0103FF |
| D801 | 010400 | 010401 | ... | 0107FF |
| ⋮ | ⋮ | ⋮ | ⋱ | ⋮ |
| DBFF | 10FC00 | 10FC01 | ... | 10FFFF |
- يتم طرح 0x10000 من نقطة الكود (U) ، مما يترك رقمًا مكونًا من 20 بت (U') في نطاق الأرقام السداسية العشرية 0x00000–0xFFFFF.
- تتم إضافة العشرة بتات العليا (في النطاق 0x000–0x3FF) إلى 0xD800 لإعطاء أول وحدة رمزية 16 بت أو البديل العالي (W1) ، والتي ستكون في النطاق 0xD800–0xDBFF .
- تتم إضافة العشر بتات المنخفضة (أيضًا في النطاق 0x000–0x3FF) إلى 0xDC00 لإعطاء وحدة الكود الثانية المكونة من 16 بت أو البديل المنخفض (W2) ، والتي ستكون في النطاق 0xDC00–0xDFFF .
يوضح الشكل المرئي توزيع U' بين W1 و W2 كما يلي: [ 19 ]
U' = yyyyyyyyyyxxxxxxxxxx // U - 0x10000 W1 = 110110يييييييي // 0xD800 + ييييييييي W2 = 110111xxxxxxxxxx // 0xDC00 + xxxxxxxxxx بما أن نطاقات القيم البديلة العليا ( 0xD800–0xDBFF )، والقيم البديلة الدنيا ( 0xDC00–0xDFFF )، وأحرف BMP الصالحة (0x0000–0xD7FF، 0xE000–0xFFFF) منفصلة ، فإنه لا يمكن لقيمة بديلة أن تطابق حرف BMP، أو أن تبدو وحدتا ترميز متجاورتان كزوج قيم بديلة صحيح . هذا يُبسط عمليات البحث بشكل كبير. كما يعني أن ترميز UTF-16 متزامن ذاتيًا على الكلمات ذات 16 بت: إذ يمكن تحديد ما إذا كانت وحدة الترميز تبدأ حرفًا دون فحص وحدات الترميز السابقة (أي يمكن تحديد نوع وحدة الترميز من خلال نطاقات القيم التي تقع ضمنها). يُشارك ترميز UTF-8 هذه المزايا، لكن العديد من أنظمة الترميز متعددة البايتات السابقة (مثل Shift JIS وغيرها من أنظمة الترميز الآسيوية متعددة البايتات) لم تكن تسمح بالبحث الدقيق، وكان من الممكن مزامنتها فقط عن طريق إعادة التحليل من بداية السلسلة. أما ترميز UTF-16، فلا يُجري مزامنة ذاتية في حال فقدان بايت واحد أو بدء عملية التصفح من بايت عشوائي.
نظرًا لأن الأحرف الأكثر استخدامًا موجودة جميعها في BMP، فإن التعامل مع أزواج الأحرف البديلة غالبًا لا يخضع لاختبارات شاملة. وهذا يؤدي إلى أخطاء مستمرة وثغرات أمنية محتملة، حتى في برامج التطبيقات الشائعة والمُراجعة جيدًا (مثل CVE - 2008-2938 و CVE -2012-2135 ).
U+D800 إلى U+DFFF (بدائل)
ينص معيار يونيكود الرسمي على أنه لا يمكن لأي من صيغ UTF، بما في ذلك UTF-16، ترميز نقاط الترميز البديلة. وبما أنه لن يتم تخصيص حرف لهذه النقاط، فلا داعي لترميزها. مع ذلك، يسمح نظام ويندوز باستخدام نقاط الترميز البديلة غير المزدوجة في أسماء الملفات [ 20 ] وغيرها من المواضع، مما يعني عمومًا وجوب دعمها من قِبل البرامج على الرغم من استبعادها من معيار يونيكود.
يمكن لترميز UCS-2 وUTF-8 و UTF-32 ترميز هذه النقاط الرمزية بطرق بسيطة وواضحة، ويستخدمها عدد كبير من البرامج، على الرغم من أن المعيار ينص على أن هذه الترتيبات يجب التعامل معها كأخطاء ترميز. من الممكن ترميز بديل غير مقترن (نقطة رمز بديلة عالية لا تتبعها نقطة منخفضة، أو نقطة منخفضة لا تسبقها نقطة عالية) بشكل لا لبس فيه بتنسيق UTF-16 باستخدام وحدة ترميز مساوية لنقطة الرمز. والنتيجة ليست UTF-16 صالحًا، ولكن غالبية تطبيقات ترميز وفك ترميز UTF-16 تفعل ذلك عند الترجمة بين الترميزات. [ 21 ]
أمثلة
لترميز U+10437 (𐐷) إلى UTF-16:
- اطرح 0x10000 من نقطة الكود، ليتبقى 0x0437.
- بالنسبة للبديل العالي، قم بالإزاحة إلى اليمين بمقدار 10 (القسمة على 0x400)، ثم أضف 0xD800، مما ينتج عنه 0x0001 + 0xD800 = 0xD801.
- بالنسبة للبديل الأدنى، خذ أقل 10 بتات (باقي القسمة على 0x400)، ثم أضف 0xDC00، مما ينتج عنه 0x0037 + 0xDC00 = 0xDC37.
لفك تشفير U+10437 (𐐷) من UTF-16:
- خذ القيمة البديلة العالية (0xD801) واطرح منها 0xD800، ثم اضربها في 0x400، مما ينتج عنه 0x0001 × 0x400 = 0x0400.
- خذ القيمة البديلة المنخفضة (0xDC37) واطرح منها 0xDC00، مما ينتج عنه 0x37.
- قم بجمع هاتين النتيجتين معًا (0x0437)، وأخيرًا أضف 0x10000 للحصول على نقطة الكود النهائية، 0x10437.
يلخص الجدول التالي هذا التحويل، بالإضافة إلى تحويلات أخرى. تشير الألوان إلى كيفية توزيع البتات من نقطة الترميز بين بايتات UTF-16. تظهر البتات الإضافية التي أضافتها عملية ترميز UTF-16 باللون الأسود.
| شخصية | نقطة رمز ثنائي | ترميز UTF-16 الثنائي | وحدات ترميز UTF-16 السداسية | بايتات سداسية عشرية UTF-16BE | بايتات سداسية عشرية UTF-16LE | |
|---|---|---|---|---|---|---|
| دولار | U+0024 | 0000 0000 0010 0100 | 0000 0000 0010 0100 | 0024 | 00 24 | 24 00 |
| € | U+20AC | 0010 0000 1010 1100 | 0010 0000 1010 1100 | 20AC | 20 AC | AC 20 |
| 𐐷 | U+10437 | 0001 0000 0100 0011 0111 | 1101 1000 0000 0001 1101 1100 0011 0111 | D801DC37 | D8 01DC 37 | 01 D837 DC |
| 🤭 | U+24B62 | 0010 0100 1011 0110 0010 | 1101 1000 0101 0010 1101 1111 0110 0010 | D852DF62 | D8 52DF 62 | 52 D862 DF |
مخططات ترميز ترتيب البايت
تُنتج صيغتا UTF-16 وUCS-2 سلسلة من وحدات الترميز ذات 16 بت. وبما أن معظم بروتوكولات الاتصال والتخزين مُعرّفة للبايتات، وبالتالي تتطلب كل وحدة بايتين من 8 بت، فقد يعتمد ترتيب البايتات على ترتيب البايتات في بنية الحاسوب.
للمساعدة في تحديد ترتيب البايتات لوحدات الترميز، يسمح ترميز UTF-16 بوضع علامة ترتيب البايتات (BOM)، وهي نقطة ترميز قيمتها U+FEFF، قبل أول قيمة مُرمّزة فعلية. [ ج ] (U+FEFF هي مسافة غير مرئية عديمة العرض وغير قابلة للكسر /ZWNBSP). [ د ] إذا تطابقت بنية ترتيب البايتات في المُفكِّك مع بنية المُشفِّر، فسيكتشف المُفكِّك القيمة 0xFEFF، بينما يُفسِّر المُفكِّك ذو الترتيب المعاكس علامة ترتيب البايتات على أنها القيمة غير الحرفية U+FFFE المحجوزة لهذا الغرض. تُشير هذه النتيجة غير الصحيحة إلى ضرورة تبديل البايتات للقيم المتبقية.
في حال عدم وجود علامة ترتيب البايتات (BOM ) ، توصي RFC 2781 بافتراض استخدام ترميز big-endian (BE). عمليًا، نظرًا لأن نظام Windows يستخدم ترتيب little-endian (LE) افتراضيًا، فإن العديد من التطبيقات تفترض استخدام ترميز little-endian. كما يُمكن التحقق من ترتيب البايتات بالبحث عن البايتات الفارغة، بافتراض أن الأحرف الأقل من U+0100 شائعة جدًا. إذا كانت البايتات الزوجية (بدءًا من 0) فارغة، فهذا يعني أن الترميز big-endian.
يسمح المعيار أيضًا بتحديد ترتيب البايتات صراحةً بتحديد UTF-16BE أو UTF-16LE كنوع ترميز. عند تحديد ترتيب البايتات بهذه الطريقة، يُفترض عدم إضافة علامة ترتيب البايتات (BOM) إلى بداية النص، ويجب التعامل مع الحرفين U+FEFF في البداية كحرف ZWNBSP. تتجاهل معظم التطبيقات علامة ترتيب البايتات في جميع الحالات على الرغم من هذه القاعدة.
بالنسبة لبروتوكولات الإنترنت ، اعتمدت هيئة IANA الأسماء "UTF-16" و"UTF-16BE" و"UTF-16LE" لهذه الترميزات (الأسماء غير حساسة لحالة الأحرف). قد يكون للأسماء البديلة UTF_16 أو UTF16 معنى في بعض لغات البرمجة أو تطبيقات البرامج، لكنها ليست أسماءً قياسية في بروتوكولات الإنترنت.
تُستخدم تسميات مماثلة، UCS-2BE و UCS-2LE ، لعرض إصدارات UCS-2 .
كفاءة
قد يستخدم "الحرف" أي عدد من نقاط ترميز يونيكود [ 22 ] ، وفي ترميز UTF-16، يمكن أن تستخدم نقطة الترميز قيمة واحدة أو قيمتين من 16 بت. هذا يعني أن ترميز UTF-16 لا يُساعد بأي شكل من الأشكال في "عدّ الأحرف" أو في "قياس عرض/طول السلسلة النصية".
يُزعم غالبًا أن ترميز UTF-16 أكثر كفاءة في استخدام المساحة من ترميز UTF-8 للغات شرق آسيا، إذ يستخدم بايتين للأحرف التي تشغل 3 بايتات في UTF-8. لكن بما أن النصوص الحقيقية تحتوي على العديد من المسافات والأرقام وعلامات الترقيم وعلامات التنسيق (مثل صفحات الويب) وأحرف التحكم، والتي تشغل بايتًا واحدًا فقط في UTF-8، فإن هذا الزعم لا ينطبق إلا على النصوص الكثيفة المصطنعة. ويمكن تقديم ادعاء أكثر دقة بالنسبة للغتين الديفاناغارية والبنغالية ، اللتين تستخدمان كلمات متعددة الأحرف، حيث تشغل جميع الأحرف 3 بايتات في UTF-8 و2 بايت فقط في UTF-16.
الاستخدام
إحدى طرق تحديد ترميز النظام المستخدم داخليًا هي الاستعلام عن "طول" سلسلة نصية تحتوي على حرف واحد غير BMP. إذا كان الطول 2، فهذا يعني استخدام UTF-16. يشير 4 إلى UTF-8. قد يشير 3 أو 6 إلى CESU-8 . قد يشير 1 إلى UTF-32، ولكن الأرجح أنه يشير إلى أن اللغة تفك ترميز السلسلة إلى نقاط الترميز قبل قياس "الطول".
أنظمة التشغيل
يُستخدم ترميز UTF-16 للنصوص في واجهة برمجة تطبيقات نظام التشغيل لجميع إصدارات مايكروسوفت ويندوز المدعومة حاليًا [ 23 ] (بما في ذلك ويندوز سي إي منذ الإصدار 5.0 [ 24 ] وويندوز إن تي منذ ويندوز 2000 [ 25 ] ). قبل ويندوز 2000، كان ويندوز إن تي يدعم ترميز UCS-2 فقط [ 26 ] [ 27 ] . أما ويندوز 9x، فكان يدعم UCS-2 فقط، ويقتصر دعم يونيكود على أنظمة داخلية مثل VFAT و WDM . منذ ويندوز 10 الإصدار 1903 (أو الإصدار التجريبي 17035)، أصبح من الممكن استخدام ترميز UTF-8 في واجهة برمجة التطبيقات [ 28 ] ، مع أن معظم البرامج، مثل مستكشف ملفات ويندوز ، لا تزال تستخدم واجهة برمجة تطبيقات UTF-16. وقد صرّحت مايكروسوفت بأن "UTF-16 [...] يُمثّل عبئًا فريدًا يفرضه ويندوز على التعليمات البرمجية التي تستهدف منصات متعددة" [ 29 ].
يُحدد نظام التشغيل IBM i ترميز CCSID ( صفحة الترميز ) 13488 لترميز UCS-2 وترميز CCSID 1200 لترميز UTF-16، على الرغم من أن النظام يتعامل مع كليهما على أنهما UTF-16. [ 30 ]
منصات وأطر التطبيقات
يتم استخدام UTF-16 بواسطة منصة Qualcomm BREW ؛ وبيئات .NET ؛ ومجموعة أدوات Qt الرسومية متعددة المنصات .
أنظمة الملفات
يستخدم نظام ملفات جوليت ، المستخدم في أقراص CD-ROM ، ترميز أسماء الملفات باستخدام UCS-2BE (حتى 64 حرفًا من أحرف يونيكود لكل اسم ملف). بينما يستخدم نظاما الملفات NTFS و ReFS ترميز UTF-16 لتخزين السلاسل النصية. [ 31 ]
المراسلة
تستخدم الرسائل النصية القصيرة (SMS) ترميز UTF-16 بكفاءة. بينما تُحدد معايير 3GPP TS 23.038 ( GSM ) و IS-637 ( CDMA ) ترميز UCS-2، إلا أن ترميز UTF-16 ضروري لعمل الرموز التعبيرية (Emoji). [ 32 ] يستخدم نظام التشغيل Symbian المستخدم في هواتف Nokia S60 وهواتف Sony Ericsson UIQ ترميز UCS-2، في حين تستخدم هواتف iPhone ترميز UTF-16.
لغات البرمجة
استخدمت بايثون الإصدار 2.0 رسميًا ترميز UCS-2 داخليًا فقط، لكن مُفكِّك ترميز UTF-8 إلى "يونيكود" أنتج ترميز UTF-16 صحيحًا. كما كان بالإمكان تجميع بايثون لاستخدام ترميز UTF-32 داخليًا، وقد تم ذلك أحيانًا على أنظمة يونكس. غيّرت بايثون الإصدار 3.3 التخزين الداخلي لاستخدام أحد الترميزات التالية: ISO-8859-1 أو UCS-2 أو UTF-32، وذلك بناءً على أكبر نقطة ترميز في السلسلة النصية. [ 33 ] أسقطت بايثون الإصدار 3.12 بعض الوظائف (لامتدادات CPython) لتسهيل الانتقال إلى ترميز UTF-8 لجميع السلاسل النصية. [ 34 ]
استخدمت لغة جافا في الأصل ترميز UCS-2، وأضافت دعمًا للأحرف الإضافية لترميز UTF-16 في J2SE 5.0 . جميع السلاسل النصية في الذاكرة بتنسيق UTF-16 (منذ جافا 9، يمكن ضغط السلاسل النصية التي تحتوي على أحرف ISO-8859-1 فقط إلى بايتات [ 35 ] ). تستخدم عمليات الإدخال والإخراج في جافا ترميز UTF-8 [ 36 ] أو UTF-8 المعدل [ 37 ] .
قد يستخدم جافا سكريبت UCS-2 أو UTF-16. [ 38 ]
تستخدم لغة C# ترميز UTF-16 للسلاسل النصية. وقد أُضيفت مؤخرًا إمكانية استخدام سلاسل UTF-8 [ 39 ] ، بالإضافة إلى بعض دوال .NET [ 40 ] التي تستخدمها.
استخدمت لغة Swift ، وهي لغة التطبيقات المفضلة لدى Apple، ترميز UTF-16 لتخزين السلاسل النصية حتى الإصدار 5 الذي تحول إلى ترميز UTF-8. [ 41 ]
تُضمّن العديد من لغات البرمجة ترميز البيانات ضمن كائن السلسلة النصية، وبالتالي تخزن وتدعم مجموعة واسعة من الترميزات، بما في ذلك UTF-16. ويعتبر معظمها UTF-16 وUCS-2 ترميزات مختلفة. ومن الأمثلة على ذلك لغة PHP [ 42 ] ، وMySQL [ 43 ] ، وJavaScript منذ إصدار ES2015.
في بعض اللغات، الطريقة الوحيدة لوضع حرف غير BMP في سلسلة UTF-16 ثابتة هي كتابة كلا النصفين البديلين، على سبيل المثال كتابة "\uD834\uDD1E"بدلاً من "\U0001D11E"U +1D11E .
البرامج الثابتة
يستخدم نظام UEFI ترميز UTF-16 لترميز النصوص افتراضيًا. ومنذ الإصدار 2.4 على الأقل، أصبح بإمكانه استخدام ترميز ASCII لترميز النصوص التي تحتوي على ASCII فقط.
انظر أيضاً
ملحوظات
- ↑ هذا الرقم هو في الواقع نتيجة لترميز UTF-16. يوجد 2 ^16 - 2048 + 1024 × 1024 = 1,112,064 نقطة ترميز يمكن ترميزها بواسطة UTF-16. تم تقييد يونيكود بهذه النقاط الترميزية عند إضافة UTF-16 إلى المعيار. قبل ذلك، كان لدى يونيكود 2 ^31 = 2,147,483,648 نقطة ترميز صالحة.
- ↑ كما أن ترميز UTF-32 غير متوافق مع ASCII، ولكنه غير مدرج ضمن ترميزات الويب. [ 8 ]
- ↑ ينتج ترميز UTF-8 قيم بايت أقل من 0xFE، لذا فإن أي بايت في تسلسل BOM يحدد الترميز على أنه UTF-16 (بافتراض أنه لا يُتوقع UTF-32).
- ↑ تم إيقاف استخدام U+FEFF كحرف ZWNBSP بدلاً من استخدامه كعلامة ترتيب البايتات (BOM) لصالح U+2060 (علامة ربط الكلمات)؛ راجع الأسئلة الشائعة حول علامة ترتيب البايتات (BOM) على موقع Unicode.org. ولكن إذا فسر تطبيق ما علامة ترتيب البايتات الأولية كحرف، فإن حرف ZWNBSP يكون غير مرئي، وبالتالي يكون التأثير ضئيلاً.
- ↑ ينصّ القسم 4.3 من RFC 2781 على أنه في حال عدم وجود علامة BOM، "ينبغي تفسير النص على أنه بتنسيق big-endian". ووفقًا للقسم 1.2، فإن معنى مصطلح "ينبغي" يخضع لـ RFC 2119. في تلك الوثيقة، ينصّ القسم 3 على أنه "... قد توجد أسباب وجيهة في ظروف معينة لتجاهل عنصر معين، ولكن يجب فهم جميع التداعيات ودراستها بعناية قبل اختيار مسار مختلف".
مراجع
- ↑ "التوافق" . معيار يونيكود (الإصدار 6.0 ). ماونتن فيو، كاليفورنيا، الولايات المتحدة الأمريكية: اتحاد يونيكود . 3.9 أشكال ترميز يونيكود. ISBN 978-1-936213-01-6كل
شكل من أشكال الترميز يربط نقاط رمز Unicode من U+0000 إلى U+D7FF ومن U+E000 إلى U+10FFFF
- 1 2 3 "ج.2 أشكال الترميز في معيار ISO/IEC 10646" (ملف PDF) . معيار يونيكود، الإصدار 6.0 . ماونتن فيو، كاليفورنيا: اتحاد يونيكود . فبراير 2011. ص 573. ISBN 978-1-936213-01-6[
...] يجب اعتبار مصطلح UCS-2 الآن مصطلحاً قديماً. فهو لم يعد يشير إلى شكل ترميز في معيار 10646 أو معيار يونيكود.
- ١ ٢ ٣ "أسئلة شائعة: ما الفرق بين UCS-2 وUTF-16؟" . unicode.org . مؤرشف من الأصل بتاريخ ١٨ أغسطس ٢٠٠٣. تم الاطلاع عليه بتاريخ ١٩ مارس ٢٠٢٤.
UCS-2 مصطلح قديم يشير إلى تطبيق Unicode حتى الإصدار ١.١ [...]
- ↑ "ما هو UTF-16؟" . اتحاد يونيكود . يونيكود، شركة . تم الاطلاع عليه في 7 يناير 2023. يستخدم UTF-16 وحدة ترميز واحدة مكونة
من 16 بت لترميز أكثر من 60,000 حرف من أكثر الأحرف شيوعًا في يونيكود.
- ↑ لوندي، كين (9 يناير 2022). "قائمة أفضل عشرة لعام 2022: لماذا ندعم نقاط الترميز التي تتجاوز BMP؟" . ميديوم . تم الاطلاع عليه في 7 يناير 2024. خطرت
لي فكرة هذه القائمة لأول مرة منذ أكثر من عشر سنوات، وذلك بسبب بعض بيئات العمل التي كانت لا تزال تدعم نقاط ترميز BMP فقط. وكان الهدف، بالطبع، هو تحفيز مطوري هذه البيئات على دعم نقاط الترميز التي تتجاوز BMP من خلال تقديم قائمة مفصلة بالأسباب التي تدعو إلى ذلك. وبالفعل، لا تزال هناك بعض بيئات العمل التي تدعم نقاط ترميز BMP فقط، مثل تطبيق VivaDesigner.
- ↑ "هل ينبغي اعتبار ترميز UTF-16 ضارًا؟" . موقع تبادل معلومات هندسة البرمجيات . تم الاطلاع عليه بتاريخ 20 نوفمبر 2024.
تعديل أسماء الملفات في مربعات حوار ويندوز معطل (يتطلب الحذف ضغطتين على زر الحذف).
- ↑ "معيار HTML الحي" . w3.org . 10-06-2020. مؤرشف من الأصل في 08-09-2020 . تم الاسترجاع في 15-06-2020 .
ترميزات UTF-16 هي الترميزات الوحيدة التي يجب على هذه المواصفة التعامل معها على أنها غير متوافقة مع ASCII.
- ↑ "معيار الترميز" . encoding.spec.whatwg.org . تم الاطلاع عليه بتاريخ 22-04-2023 .
- ↑ "إحصائيات الاستخدام وحصة السوق لترميز UTF-16 للمواقع الإلكترونية، نوفمبر 2025" . w3techs.com . تاريخ الاسترجاع: 20 نوفمبر 2025 .
- ↑ "إحصائيات الاستخدام وحصة السوق لترميز UTF-8 للمواقع الإلكترونية، نوفمبر 2025" . w3techs.com . تاريخ الاسترجاع: 20 نوفمبر 2025 .
- ↑ "معيار الترميز" . encoding.spec.whatwg.org . تاريخ الاطلاع: ٢٢ أكتوبر ٢٠١٨.
يُعد ترميز UTF-8 الترميز الأنسب لتبادل يونيكود، وهو مجموعة الأحرف المشفرة عالميًا. لذلك، بالنسبة للبروتوكولات والتنسيقات الجديدة، وكذلك التنسيقات الحالية المستخدمة في سياقات جديدة، تتطلب هذه المواصفة (وتُعرّف) ترميز UTF-8. [...] تختفي المشكلات المذكورة هنا عند استخدام UTF-8 حصريًا، وهو أحد الأسباب العديدة التي جعلت UTF-8 الترميز الإلزامي لجميع النصوص على الويب.
- ↑ "MySQL :: دليل مرجعي لـ MySQL 5.7 :: 10.9.4 مجموعة أحرف ucs2 (ترميز يونيكود UCS-2)" . dev.mysql.com . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "ما هو UTF-16؟" . اتحاد يونيكود . شركة يونيكود . تم الاطلاع عليه بتاريخ 29 مارس 2018 .
- ↑ "الأسئلة الشائعة - UTF-8، UTF-16، UTF-32 وBOM" . www.unicode.org . تاريخ الاسترجاع: 20 نوفمبر 2025 .
- ↑ ISO/IEC 10646:2014 "تكنولوجيا المعلومات - مجموعة الأحرف المشفرة العالمية (UCS)" القسمين 9 و 10.
- ↑ "الفصل 2: البنية العامة" (ملف PDF) . معيار يونيكود الإصدار 7.0 . 2014. 2.5 أشكال الترميز.
- ↑ "استقرار ترميز الأحرف" . unicode.org . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ ألين، جولي د.؛ أندرسون، ديبورا؛ بيكر، جو ؛ كوك، ريتشارد، محرران. (2014). "3.8 البدائل" (ملف PDF) . معيار يونيكود، الإصدار 7.0 - المواصفات الأساسية . ماونتن فيو: اتحاد يونيكود . ص 118. مؤرشف (ملف PDF) من الأصل بتاريخ 9 أكتوبر 2022. تم الاطلاع عليه بتاريخ 3 نوفمبر 2014 .
- ↑ يرجو، فرانسوا؛ هوفمان، بول (فبراير 2000). "UTF-16، ترميز ISO 10646" . tools.ietf.org . تاريخ الاسترجاع: 18 يونيو 2019 .
- ↑ "الحد الأقصى لطول المسار" . مايكروسوفت . 18 يوليو 2022. تم الاطلاع عليه بتاريخ 10 أكتوبر 2022.
[...] يتعامل نظام الملفات مع أسماء المسارات والملفات كسلسلة مبهمة من أحرف WCHAR.
- ↑ "مثال على أزواج بديلة في ترميز يونيكود UTF-16" . كلاريون هاب . 18 يناير 2026. تاريخ الاسترجاع: 3 يوليو 2026 .
- ↑ "ليس من الخطأ أن يكون طول "🤦🏼♂️" يساوي 7" . hsivonen.fi . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "يونيكود" . مايكروسوفت ليرن . تم الاطلاع عليه بتاريخ 8 مارس 2011.
تستخدم هذه الدوال ترميز UTF-16 (الأحرف العريضة) (...) المستخدم لترميز يونيكود الأصلي على أنظمة تشغيل ويندوز.
- ↑ Archiveddocs. "العمل مع بدائل يونيكود (ويندوز سي إي 5.0)" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "البدائل والأحرف التكميلية" . مايكروسوفت ليرن . 24-05-2022.
يُقدّم نظام التشغيل ويندوز 2000 دعمًا للإدخال والإخراج الأساسيين، بالإضافة إلى فرز بسيط للأحرف التكميلية. مع ذلك، لا تتوافق جميع مكونات النظام مع الأحرف التكميلية.
- ↑ كارل بريدج - مايكروسوفت. "يونيكود - تطبيقات Win32" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ كارل بريدج - مايكروسوفت. "البدائل والأحرف التكميلية - تطبيقات Win32" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "استخدام صفحات ترميز UTF-8 في تطبيقات Windows" . learn.microsoft.com . تاريخ الاسترجاع: 6 يونيو 2020.
بدءًا من إصدار Windows
1903 (
تحديث مايو 2019)، يمكنك استخدام خاصية ActiveCodePage في ملف appxmanifest للتطبيقات المعبأة، أو ملف Fusion Manifest للتطبيقات غير المعبأة، لإجبار العملية على استخدام UTF-8 كصفحة ترميز. [...]
ينطبق هذا
فقط في حالة التشغيل على إصدار Windows
1903 (
تحديث مايو 2019) أو أعلى، وكانت خاصية ActiveCodePage المذكورة أعلاه مُعيّنة على UTF-8. وإلا، فسيتم استخدام صفحة ترميز النظام القديمة. نوصي باستخدامها
بشكل صريح.
CP_ACPCP_UTF8CP_UTF8 - ↑ "دعم UTF-8 في حزمة تطوير ألعاب مايكروسوفت (GDK) - حزمة تطوير ألعاب مايكروسوفت" . learn.microsoft.com . تاريخ الاسترجاع: 5 مارس 2023.
من خلال العمل بنظام UTF-8، يمكنك ضمان أقصى قدر من التوافق [...] يعمل نظام ويندوز بشكل أصلي بنظام UTF-16 (أو WCHAR)، مما يتطلب تحويلات صفحات الترميز باستخدام MultiByteToWideChar وWideCharToMultiByte. يُمثل هذا عبئًا فريدًا يفرضه ويندوز على التعليمات البرمجية التي تستهدف منصات متعددة. [...] تتجه حزمة تطوير ألعاب مايكروسوفت (GDK) وويندوز بشكل عام نحو دعم UTF-8 لإزالة هذا العبء الفريد الذي يفرضه ويندوز على التعليمات البرمجية التي تستهدف أو تتبادل مع منصات متعددة والويب. كما يؤدي ذلك إلى تقليل مشكلات التدويل في التطبيقات والألعاب، ويقلل من مصفوفة الاختبار المطلوبة لضمان التوافق.
- ↑ "UCS-2 وعلاقته بـ Unicode (UTF-16)" . www.ibm.com . تاريخ الاسترجاع: 20 نوفمبر 2025 .
- ↑ كارل بريدج - مايكروسوفت. "مجموعات الأحرف المستخدمة في أسماء الملفات - تطبيقات Win32" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 11 أكتوبر 2025 .
- ↑ تشاد سيلف (2012-11-08). "مغامرات في رسائل يونيكود النصية القصيرة" . تويليو. مؤرشف من الأصل في 2015-09-08 . تم الاطلاع عليه في 2015-08-28 .
- ↑ "PEP 393 – تمثيل السلاسل المرن | peps.python.org" . مقترحات تحسين بايثون (PEPs) . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "PEP 623 – إزالة wstr من Unicode | peps.python.org" . مقترحات تحسين بايثون (PEPs) . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "ملاحظات إصدار JDK 9 - الميزات الجديدة" .
- ↑ "مواصفات واجهة برمجة تطبيقات Java Development Kit الإصدار 24" . docs.oracle.com . تم الاطلاع عليه بتاريخ 20 نوفمبر 2025 .
- ↑ "وثائق Java SE للواجهة java.io.DataInput، القسم الفرعي الخاص بـ UTF-8 المعدل" . شركة أوراكل . 2015. تاريخ الاسترجاع: 16 أكتوبر 2015 .
- ↑ "ترميز الأحرف الداخلي في جافا سكريبت: UCS-2 أم UTF-16؟ · ماتياس بينينز" . mathiasbynens.be . تاريخ الاسترجاع: 20 نوفمبر 2025 .
- ↑ بيل واغنر. "القيم النصية UTF-8 - مواصفات ميزات C#" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 22-03-2026 .
- ↑ "فئة محلل Utf8 (System.Buffers.Text)" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 16 أبريل 2026 .
- ↑ "سلسلة UTF-8" . Swift.org . 2019-03-20 . تم الاسترجاع في 2020-08-20 .
- ↑ "PHP: ترميزات الأحرف المدعومة - دليل المستخدم" . php.net .
- ↑ "MySQL :: دليل مرجعي لـ MySQL 8.0 :: 10.9.2 مجموعة الأحرف utf8mb3 (ترميز يونيكود UTF-8 ثلاثي البايت)" . dev.mysql.com . تم الاطلاع عليه بتاريخ 24-02-2023 .
روابط خارجية
- ترميز الأحرف
- الترميزات
- تنسيقات تحويل يونيكود
- مقدمات متعلقة بالحاسوب في عام 1991
