ترميز UTF-16

ترميز UTF-16
مثال على ترميز أحرف Unicode من خلال UTF-16
اللغة(اللغات)دولي
معيارمعيار يونيكود
تصنيفتنسيق تحويل Unicode ، ترميز بعرض متغير
يمتديو سي إس-2
تحويلات / ترميزISO/IEC 10646 ( يونيكود )

UTF-16 ( تنسيق تحويل يونيكود 16 بت ) هو ترميز أحرف قادر على ترميز جميع نقاط الترميز الصالحة البالغ عددها 1,112,064 من يونيكود (في الواقع، يتم تحديد عدد نقاط الترميز هذا من خلال تصميم UTF-16). يكون الترميز بطول متغير ، حيث يتم ترميز نقاط الترميز بوحدة أو وحدتي ترميز 16 بت . نشأ UTF-16 من ترميز قديم قديم بعرض ثابت 16 بت يُعرف الآن باسم "UCS-2" (لمجموعة أحرف عالمية مكونة من 2 بايت)، [1] [2] بمجرد أن أصبح من الواضح أن هناك حاجة إلى أكثر من 2 16 (65,536) نقطة ترميز، [3] بما في ذلك معظم الرموز التعبيرية وأحرف CJK المهمة مثل الأسماء الشخصية وأسماء الأماكن. [4]

يستخدم UTF-16 بواسطة أنظمة مثل Microsoft Windows API ولغة البرمجة Java و JavaScript /ECMAScript. كما يستخدم أحيانًا للنصوص العادية وملفات البيانات الخاصة بمعالجة الكلمات على Microsoft Windows. ويستخدمه تنفيذات SMS الأكثر حداثة . [5]

UTF-16 هو الترميز الوحيد (ما زال) المسموح به على الويب والذي لا يتوافق مع ASCII [6] [nb 1] ولم يكتسب شعبية على الويب أبدًا، حيث تم إعلانه بواسطة أقل من 0.003٪ من صفحات الويب. [8] UTF-8 ، على سبيل المقارنة، يمثل أكثر من 98٪ من جميع صفحات الويب. [9] تعتبر مجموعة عمل تقنية تطبيق النص التشعبي على الويب (WHATWG) UTF-8 "الترميز الإلزامي لجميع [النصوص]" ولأسباب أمنية لا ينبغي لتطبيقات المتصفح استخدام UTF-16. [10]

تاريخ

في أواخر الثمانينيات، بدأ العمل على تطوير ترميز موحد لمجموعة أحرف عالمية ( UCS ) من شأنه أن يحل محل الترميزات السابقة الخاصة باللغة بنظام منسق واحد. وكان الهدف هو تضمين جميع الأحرف المطلوبة من معظم لغات العالم، بالإضافة إلى الرموز من المجالات التقنية مثل العلوم والرياضيات والموسيقى. كانت الفكرة الأصلية هي استبدال الترميزات النموذجية المكونة من 256 حرفًا، والتي تتطلب بايتًا واحدًا لكل حرف، بترميز يستخدم 65536 (2 16 ) قيمة، والتي تتطلب بايتين (16 بت) لكل حرف.

عملت مجموعتان على هذا الأمر بالتوازي، ISO/IEC JTC 1/SC 2 و Unicode Consortium ، حيث يمثل الأخير في الغالب مصنعي معدات الحوسبة. حاولت المجموعتان مزامنة تعيينات الأحرف الخاصة بهما بحيث تكون الترميزات النامية متوافقة مع بعضها البعض. كان الترميز المبكر المكون من 2 بايت يسمى في الأصل "Unicode"، ولكنه يسمى الآن "UCS-2". [1] [2] [11]

عندما أصبح من الواضح بشكل متزايد أن 2 16 حرفًا لن يكون كافيًا، [12] قدم معهد مهندسي الكهرباء والإلكترونيات مساحة أكبر من 31 بتًا وترميزًا ( UCS-4 ) يتطلب 4 بايتات لكل حرف. وقد قاوم اتحاد يونيكود هذا ، وذلك لأن 4 بايتات لكل حرف تهدر الكثير من الذاكرة ومساحة القرص، ولأن بعض الشركات المصنعة كانت بالفعل مستثمرة بشكل كبير في تقنية 2 بايت لكل حرف. تم تطوير مخطط ترميز UTF-16 كحل وسط وتم تقديمه مع الإصدار 2.0 من معيار يونيكود في يوليو 1996. [13] وهو محدد بالكامل في RFC 2781، الذي نشرته IETF في عام 2000. [14] [15]

تم تحديد UTF-16 في أحدث إصدارات كل من المعيار الدولي ISO/IEC 10646 ومعيار Unicode. "يجب اعتبار UCS-2 الآن قديمًا. لم يعد يشير إلى شكل ترميز في 10646 أو معيار Unicode." [1] [2] لن يتم توسيع UTF-16 أبدًا لدعم عدد أكبر من نقاط الترميز أو لدعم نقاط الترميز التي تم استبدالها بنقاط بديلة، حيث أن هذا من شأنه أن ينتهك سياسة استقرار Unicode فيما يتعلق بالفئة العامة أو نقاط الترميز البديلة. [16] (أي مخطط يظل رمزًا متزامنًا ذاتيًا يتطلب تخصيص نقطة ترميز واحدة على الأقل من المستوى متعدد اللغات الأساسي (BMP) لبدء تسلسل. لا يُسمح بتغيير غرض نقطة الترميز.)

وصف

يتم ترميز كل نقطة ترميز Unicode إما كوحدة ترميز واحدة أو اثنتين من 16 بت . يتم ترميز نقاط الترميز الأقل من 2 16 ("في BMP") بوحدة ترميز واحدة من 16 بت تساوي القيمة العددية لنقطة الترميز، كما هو الحال في UCS-2 الأقدم. يتم ترميز نقاط الترميز الأكبر من أو تساوي 2 16 ("أعلى من BMP") باستخدام وحدتي ترميز من 16 بت. يتم اختيار هاتين الوحدتين الترميزيتين من 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. [ بحاجة لمصدر ] اعتبارًا من Unicode 9.0، تقع بعض النصوص الحديثة غير اللاتينية الآسيوية والشرق الأوسط وأفريقيا خارج هذا النطاق، كما هو الحال مع معظم أحرف الرموز التعبيرية .

نقاط الكود من U+010000 إلى U+10FFFF

يتم ترميز نقاط الترميز من المستويات الأخرى كوحدتي ترميز مكونتين من 16 بتًا تسمى زوجًا بديلًا . وحدة الترميز الأولى هي بديل مرتفع والثانية هي بديل منخفض (يُعرف هذان أيضًا باسم البدائل "البادئة" و"اللاحقة"، على التوالي، على غرار البايتات البادئة واللاحقة في UTF-8. [17] ):

فك تشفير UTF-16
قليل
عالي
دي سي00 دي سي 01    ...    دي إف إف إف
د800 010000 010001 ... 0103FF
د801 010400 010401 ... 0107FF
دي بي إف إف 10FC00 10FC01 ... 10فففف
  • يتم طرح 0x10000 من نقطة الرمز (U) ، مما يترك رقمًا مكونًا من 20 بتًا (U') في نطاق الرقم السداسي 0x00000–0xFFFFF.
  • يتم إضافة البتات العشرة العليا (في النطاق 0x000–0x3FF) إلى 0xD800 لإعطاء وحدة الكود الأولى المكونة من 16 بت أو البديل العالي (W1) ، والتي ستكون في النطاق 0xD800–0xDBFF .
  • يتم إضافة البتات العشرة المنخفضة (أيضًا في النطاق 0x000–0x3FF) إلى 0xDC00 لإعطاء وحدة الكود الثانية المكونة من 16 بت أو البديل المنخفض (W2) ، والتي ستكون في النطاق 0xDC00–0xDFFF .

عند توضيح ذلك بصريًا، يبدو توزيع U' بين W1 و W2 على النحو التالي: [18]

U' = yyyyyyyyyxxxxxxxxxx // 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 (بدائل)

يقول معيار Unicode الرسمي أنه لا يمكن لأي أشكال UTF، بما في ذلك UTF-16، ترميز نقاط الترميز البديلة. ونظرًا لأنه لن يتم تعيين حرف لها مطلقًا، فلا ينبغي أن يكون هناك سبب لترميزها. ومع ذلك، يسمح Windows بوجود بدائل غير مقترنة في أسماء الملفات [19] وأماكن أخرى، وهو ما يعني عمومًا أنه يجب دعمها بواسطة البرامج على الرغم من استبعادها من معيار Unicode.

يمكن لترميزات UCS-2 وUTF-8 و UTF-32 ترميز نقاط الترميز هذه بطرق بسيطة وواضحة، كما تقوم كمية كبيرة من البرامج بذلك، على الرغم من أن المعيار ينص على أنه يجب التعامل مع مثل هذه الترتيبات على أنها أخطاء ترميز.

من الممكن ترميز بديل غير مقترن بشكل لا لبس فيه (نقطة رمز بديل عالية لا تتبعها نقطة رمز منخفضة، أو نقطة رمز منخفضة لا تسبقها نقطة رمز مرتفعة) بتنسيق UTF-16 باستخدام وحدة رمز تساوي نقطة الرمز. النتيجة ليست UTF-16 صالحة، لكن غالبية تطبيقات ترميز وفك ترميز UTF-16 تفعل ذلك عند الترجمة بين الترميزات. [ بحاجة لمصدر ]

أمثلة

لترميز U+10437 (𐐷) إلى UTF-16:

  • اطرح 0x10000 من نقطة الرمز، ليتبقى 0x0437.
  • بالنسبة للبديل العالي، قم بالتحويل إلى اليمين بمقدار 10 (قم بالقسمة على 0x400)، ثم أضف 0xD800، مما يؤدي إلى 0x0001 + 0xD800 = 0xD801.
  • بالنسبة للبديل المنخفض، خذ البتات العشرة المنخفضة (باقي القسمة على 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 D801 DC37 D8 01 DC 37 01 D8 37 DC
𤭢 U+24B62 0010 0100 1011 0110 0010 1101 1000 0101 0010 1101 1111 0110 0010 D852 DF62 D8 52 DF 62 52 D8 62 DF

مخططات ترميز ترتيب البايت

ينتج UTF-16 وUCS-2 سلسلة من وحدات الترميز المكونة من 16 بت. ونظرًا لأن معظم بروتوكولات الاتصالات والتخزين محددة للبايتات، وبالتالي فإن كل وحدة تأخذ بايتين مكونين من 8 بتات، فقد يعتمد ترتيب البايتات على الترتيب النهائي (ترتيب البايتات) لبنية الكمبيوتر.

للمساعدة في التعرف على ترتيب وحدات البايت، يسمح UTF-16 بعلامة ترتيب البايت (BOM)، وهي نقطة ترميز بقيمة U+FEFF، لتسبق أول قيمة مشفرة فعلية. [nb 2] (U+FEFF هي مسافة غير مرئية بعرض صفري غير قابلة للكسر /حرف ZWNBSP.) [nb 3] إذا كانت بنية نهاية فك التشفير مطابقة لبنية المشفر، يكتشف فك التشفير قيمة 0xFEFF، لكن فك التشفير ذي الطرف المعاكس يفسر علامة ترتيب البايت على أنها القيمة غير الحرفية U+FFFE المحجوزة لهذا الغرض. توفر هذه النتيجة غير الصحيحة تلميحًا لإجراء تبديل البايت للقيم المتبقية.

إذا كانت قائمة المواد مفقودة، يوصي RFC 2781 [nb 4] بافتراض ترميز كبير النهاية (BE). في الممارسة العملية، نظرًا لاستخدام Windows لترتيب صغير النهاية (LE) افتراضيًا، تفترض العديد من التطبيقات ترميزًا صغير النهاية. كما أنه من الموثوق به اكتشاف الترتيب من خلال البحث عن بايتات فارغة، على افتراض أن الأحرف التي تقل عن U+0100 شائعة جدًا. إذا كانت البايتات الزوجية (تبدأ من 0) فارغة، فهذا يعني أن الترتيب كبير النهاية.

يسمح المعيار أيضًا بذكر ترتيب البايتات صراحةً من خلال تحديد UTF-16BE أو UTF-16LE كنوع ترميز. عندما يتم تحديد ترتيب البايتات صراحةً بهذه الطريقة، لا يُفترض إضافة قائمة المواد إلى النص، ويجب التعامل مع U+FEFF في البداية كحرف ZWNBSP. تتجاهل معظم التطبيقات قائمة المواد في جميع الحالات على الرغم من هذه القاعدة.

بالنسبة لبروتوكولات الإنترنت ، وافقت IANA على استخدام "UTF-16" و"UTF-16BE" و"UTF-16LE" كأسماء لهذه الترميزات (الأسماء لا تميز بين الأحرف الكبيرة والصغيرة). قد تكون الأسماء المستعارة UTF_16 أو UTF16 ذات معنى في بعض لغات البرمجة أو تطبيقات البرامج، ولكنها ليست أسماء قياسية في بروتوكولات الإنترنت.

يتم استخدام تسميات مماثلة، UCS-2BE و UCS-2LE ، لإظهار إصدارات UCS-2 .

مقاس

يمكن أن يستخدم "الحرف" أي عدد من نقاط ترميز Unicode. [20] على سبيل المثال، يستغرق حرف علم الرموز التعبيرية 8 بايتات، لأنه "مُنشأ من زوج من قيم Unicode القياسية" [21] (وتقع هذه القيم خارج BMP وتتطلب 4 بايتات لكل منها). لا يساعد UTF-16 بأي حال من الأحوال في "عد الأحرف" أو في "قياس عرض السلسلة".

غالبًا ما يُزعم أن UTF-16 أكثر كفاءة في استخدام المساحة من UTF-8 للغات شرق آسيا، لأنه يستخدم بايتين للأحرف التي تستغرق 3 بايتات في UTF-8. نظرًا لأن النص الحقيقي يحتوي على العديد من المسافات والأرقام وعلامات الترقيم والترميز (على سبيل المثال صفحات الويب) وأحرف التحكم، والتي تستغرق بايتًا واحدًا فقط في UTF-8، فإن هذا ينطبق فقط على كتل النص الكثيفة التي تم إنشاؤها بشكل مصطنع. [ بحاجة لمصدر ] يمكن تقديم ادعاء أكثر جدية للغة الديفاناغارية والبنغالية ، والتي تستخدم كلمات متعددة الأحرف وتستغرق جميع الأحرف 3 بايتات في UTF-8 و2 بايت فقط في UTF-16 .

بالإضافة إلى ذلك، فإن معيار ترميز Unicode الصيني GB 18030 ينتج دائمًا ملفات بنفس الحجم أو أصغر من UTF-16 لجميع اللغات، وليس فقط للغة الصينية (ويفعل ذلك عن طريق التضحية بالمزامنة الذاتية).

الاستخدام

يستخدم UTF-16 للنص في  واجهة برمجة تطبيقات نظام التشغيل لجميع الإصدارات المدعومة حاليًا من Microsoft Windows (بما في ذلك جميع الإصدارات منذ Windows CE / 2000 / XP / 2003 / Vista / 7 على الأقل [22] ) بما في ذلك Windows 10. في Windows XP، لا يتم تضمين أي نقطة رمز أعلى من U+FFFF في أي خط يتم توفيره مع Windows للغات الأوروبية. [23] [24] تدعم أنظمة Windows NT الأقدم (قبل Windows 2000) UCS-2 فقط . [25] تميل الملفات وبيانات الشبكة إلى أن تكون مزيجًا من UTF-16 وUTF-8 وترميزات البايت القديمة.

على الرغم من وجود بعض الدعم لـ UTF-8 حتى لنظام التشغيل Windows XP، [26] فقد تم تحسينه (خاصة القدرة على تسمية ملف باستخدام UTF-8) في إصدار Windows 10 Insider 17035 وتحديث مايو 2019. اعتبارًا من مايو 2019، توصي Microsoft باستخدام البرامج لـ UTF-8 ، على Windows و Xbox ، بدلاً من ترميزات 8 بت الأخرى. [27] من غير الواضح ما إذا كانوا يوصون باستخدام UTF-8 بدلاً من UTF-16، على الرغم من أنهم يذكرون "UTF-16 [..] هو عبء فريد يفرضه Windows على الكود الذي يستهدف منصات متعددة." [28]

يقوم نظام التشغيل IBM i بتعيين CCSID ( صفحة الرموز ) 13488 لترميز UCS-2 وCCSID 1200 لترميز UTF-16، على الرغم من أن النظام يعاملهما كلاهما على أنهما UTF-16. [29]

يتم استخدام UTF-16 بواسطة أنظمة التشغيل Qualcomm BREW ؛ وبيئات .NET ؛ ومجموعة أدوات واجهة المستخدم الرسومية متعددة الأنظمة الأساسية Qt .

يستخدم نظام التشغيل Symbian المستخدم في هواتف Nokia S60 وهواتف Sony Ericsson UIQ نظام UCS-2. تستخدم هواتف iPhone نظام UTF-16 لخدمة الرسائل القصيرة بدلاً من UCS-2 الموضح في معايير 3GPP TS 23.038 ( GSM ) وIS-637 ( CDMA ). [30]

يستخدم نظام الملفات Joliet ، المستخدم في وسائط CD-ROM ، ترميز أسماء الملفات باستخدام UCS-2BE (ما يصل إلى أربعة وستين حرف Unicode لكل اسم ملف).

لم يستخدم إصدار Python 2.0 رسميًا سوى UCS-2 داخليًا، لكن فك تشفير UTF-8 إلى "Unicode" أنتج UTF-16 الصحيح. كانت هناك أيضًا القدرة على تجميع Python بحيث يستخدم UTF-32 داخليًا، وقد تم ذلك أحيانًا على Unix. قام Python 3.3 بتبديل التخزين الداخلي لاستخدام أحد ISO-8859-1 أو UCS-2 أو UTF-32 اعتمادًا على أكبر نقطة رمز في السلسلة. [31] أسقط Python 3.12 بعض الوظائف (لملحقات CPython) لتسهيل الانتقال إلى UTF-8 لجميع السلاسل. [32]

استخدمت Java في الأصل UCS-2، وأضافت دعمًا إضافيًا للأحرف UTF-16 في J2SE 5.0 . ومؤخرًا شجعت على التخلي عن دعم أي ترميز 8 بت بخلاف UTF-8 [33] ، ولكن داخليًا لا يزال يتم استخدام UTF-16.

قد يستخدم JavaScript UCS-2 أو UTF-16. [34] اعتبارًا من ES2015، تمت إضافة طرق السلسلة وأعلام التعبيرات العادية إلى اللغة التي تسمح بالتعامل مع السلاسل من منظور مستقل عن الترميز.

يستخدم UEFI UTF-16 لترميز السلاسل بشكل افتراضي.

Swift ، لغة التطبيق المفضلة لدى Apple، استخدمت UTF-16 لتخزين السلاسل حتى الإصدار 5 الذي تحول إلى UTF-8. [35]

تجعل العديد من اللغات الترميز جزءًا من كائن السلسلة، وبالتالي تخزن وتدعم مجموعة كبيرة من الترميزات بما في ذلك UTF-16. يعتبر معظم الناس أن UTF-16 وUCS-2 ترميزات مختلفة. ومن الأمثلة لغة PHP [ 36] و MySQL . [37]

إحدى الطرق لتحديد الترميز الذي يستخدمه النظام داخليًا هي طلب "طول" السلسلة التي تحتوي على حرف واحد غير BMP. إذا كان الطول 2، فسيتم استخدام UTF-16. يشير الرقم 4 إلى UTF-8. قد يشير الرقم 3 أو 6 إلى CESU-8 . قد يشير الرقم 1 إلى UTF-32، ولكن من المرجح أن يشير إلى أن اللغة تفك تشفير السلسلة لترميز النقاط قبل قياس "الطول".

في العديد من اللغات، تحتاج السلاسل المقتبسة إلى بناء جملة جديد لاقتباس الأحرف غير BMP، حيث يقتصر بناء الجملة على نمط C "\uXXXX"صراحةً على 4 أرقام سداسية عشرية. توضح الأمثلة التالية بناء الجملة للحرف غير BMP U+1D11E 𝄞 MUSICAL SYMBOL G CLEF :

  • الأكثر شيوعًا ( C++ و C# و D والعديد من اللغات الأخرى) هو الحرف الكبير "U" المكون من 8 أرقام سداسية عشرية مثل "\U0001D11E". [38]
  • تستخدم تعبيرات Java 7 العادية، و ICU"\x{1D11E}" ، وPerl، .
  • يستخدم ECMAScript 2015 (JavaScript) "\u{1D11E}".
  • في العديد من الحالات الأخرى (مثل Java خارج التعبيرات العادية)، [39] الطريقة الوحيدة للحصول على أحرف غير BMP هي إدخال النصفين البديلين بشكل فردي: "\uD834\uDD1E".

انظر أيضا

ملحوظات

  1. ^ UTF-32 غير متوافق أيضًا مع ASCII، لكنه غير مدرج كترميز ويب. [7]
  2. ^ ينتج ترميز UTF-8 قيم بايت أقل بشكل صارم من 0xFE، وبالتالي فإن أي بايت في تسلسل BOM يحدد أيضًا الترميز على أنه UTF-16 (على افتراض أنه من غير المتوقع أن يكون UTF-32).
  3. ^ تم التخلي عن استخدام U+FEFF كحرف ZWNBSP بدلاً من BOM لصالح U+2060 (WORD JOINER)؛ راجع الأسئلة الشائعة حول علامة ترتيب البايت (BOM) على Unicode.org. ولكن إذا فسر تطبيق ما BOM الأولي كحرف، فإن حرف ZWNBSP يكون غير مرئي، وبالتالي يكون التأثير ضئيلاً.
  4. ^ تنص الفقرة 4.3 من RFC  2781 على أنه في حالة عدم وجود قائمة مواد، "يجب تفسير النص على أنه كبير الطرف". ووفقًا للفقرة 1.2، فإن معنى مصطلح "يجب" يخضع لـ RFC  2119. في تلك الوثيقة، تنص الفقرة 3 على "... قد توجد أسباب وجيهة في ظروف معينة لتجاهل عنصر معين، ولكن يجب فهم العواقب الكاملة ووزنها بعناية قبل اختيار مسار مختلف".

مراجع

  1. ^ abc "C.2 Encoding Forms in ISO/IEC 10646" (PDF) . The Unicode Standard, version 6.0 . Mountain View, CA: Unicode Consortium . February 2011. p. 573. ISBN 978-1-936213-01-6[...] يجب اعتبار مصطلح UCS-2 قديمًا الآن. فهو لم يعد يشير إلى نموذج ترميز في 10646 أو معيار Unicode.
  2. ^ abc "الأسئلة الشائعة: ما هو الفرق بين UCS-2 وUTF-16؟". unicode.org . مؤرشف من الأصل في 2003-08-18 . تم الاسترجاع في 2024-03-19 . UCS-2 هو مصطلح قديم يشير إلى تنفيذ Unicode حتى Unicode 1.1 [...]
  3. ^ "ما هو UTF-16؟". اتحاد يونيكود . Unicode, Inc. تم الاسترجاع في 7 يناير 2023. يستخدم UTF-16 وحدة ترميز واحدة مكونة من 16 بت لترميز أكثر من 60000 من أكثر الأحرف شيوعًا في يونيكود
  4. ^ لوندي، كين (2022-01-09). "قائمة العشرة الأوائل لعام 2022: لماذا ندعم نقاط كود ما بعد BMP؟". Medium . تم الاسترجاع في 2024-01-07 . لقد توصلت لأول مرة إلى فكرة هذه القائمة العشرة الأوائل منذ أكثر من 10 سنوات، والتي كانت مدفوعة ببعض البيئات التي لا تزال تدعم نقاط كود BMP فقط. كانت الفكرة بالطبع هي تحفيز مطوري مثل هذه البيئات على دعم نقاط الكود خارج BMP من خلال توفير قائمة مرقمة بالأسباب للقيام بذلك. ونعم، لا تزال هناك بعض البيئات التي لا تزال تدعم نقاط كود BMP فقط، مثل تطبيق VivaDesigner.
  5. ^ تشاد سيلف (2012-11-08). "مغامرات في الرسائل النصية القصيرة الموحدة". تويليو. مؤرشف من الأصل في 2015-09-08 . تم الاسترجاع في 2015-08-28 .
  6. ^ "HTML Living Standard". w3.org . 2020-06-10. مؤرشف من الأصل في 2020-09-08 . تم الاسترجاع 2020-06-15 . ترميزات UTF-16 هي الترميزات الوحيدة التي يتعين على هذه المواصفات التعامل معها باعتبارها ترميزات غير متوافقة مع ASCII.
  7. ^ "معيار الترميز". encoding.spec.whatwg.org . تم الاسترجاع في 2023-04-22 .
  8. ^ "إحصائيات استخدام UTF-16 لمواقع الويب، سبتمبر 2024". w3techs.com . تم الاسترجاع في 2024-09-03 .
  9. ^ "إحصائيات استخدام UTF-8 لمواقع الويب، سبتمبر 2024". w3techs.com . تم الاسترجاع في 2024-09-03 .
  10. ^ "معيار الترميز". encoding.spec.whatwg.org . تم الاسترجاع في 2018-10-22 . يعد ترميز UTF-8 الترميز الأكثر ملاءمة لتبادل Unicode، مجموعة الأحرف المشفرة العالمية. لذلك، بالنسبة للبروتوكولات والتنسيقات الجديدة، بالإضافة إلى التنسيقات الحالية المستخدمة في سياقات جديدة، تتطلب هذه المواصفات (وتحدد) ترميز UTF-8. [..] تختفي المشكلات الموضحة هنا عند استخدام UTF-8 حصريًا، وهو أحد الأسباب العديدة التي تجعل UTF-8 الآن الترميز الإلزامي لجميع الأشياء النصية على الويب.
  11. ^ "MySQL :: MySQL 5.7 Reference Manual :: 10.1.9.4 مجموعة أحرف ucs2 (ترميز UCS-2 Unicode)". dev.mysql.com .
  12. ^ "ما هو UTF-16؟". اتحاد يونيكود . Unicode, Inc. تم الاسترجاع في 29 مارس 2018 .
  13. ^ "أسئلة حول ترميز النماذج" . تم الاسترجاع في 12 نوفمبر 2010 .
  14. ^ ISO/IEC 10646:2014 "تكنولوجيا المعلومات - مجموعة الأحرف المشفرة العالمية (UCS)" القسمان 9 و10.
  15. ^ معيار يونيكود الإصدار 7.0 (2014) القسم 2.5.
  16. ^ "سياسات استقرار ترميز أحرف Unicode". unicode.org .
  17. ^ Allen, Julie D.; Anderson, Deborah; Becker, Joe ; Cook, Richard, eds. (2014). "3.8 Surrogates" (PDF) . The Unicode Standard, Version 7.0—Core Specification. Mountain View: The Unicode Consortium . ص. 118. مؤرشف (PDF) من الأصل في 2022-10-09 . تم الاسترجاع في 3 نوفمبر 2014 .
  18. ^ Yergeau, Francois; Hoffman, Paul (February 2000). "UTF-16, an encoding of ISO 10646". tools.ietf.org . تم الاسترجاع في 2019-06-18 .
  19. ^ "الحد الأقصى لطول المسار". Microsoft . 2022-07-18 . تم الاسترجاع 2022-10-10 . […] يعامل نظام الملفات أسماء المسارات والملفات كتسلسل غير شفاف من WCHARs
  20. ^ "ليس من الخطأ أن يكون "🤦🏼‍♂️".length == 7". hsivonen.fi . تم الاسترجاع في 2021-03-15 .
  21. ^ "وثائق مطوري Apple". developer.apple.com . تم الاسترجاع في 2021-03-15 .
  22. ^ Unicode (Windows). تم الاسترجاع في 2011-03-08 "تستخدم هذه الوظائف ترميز UTF-16 (حرف عريض) (…) المستخدم في ترميز Unicode الأصلي على أنظمة التشغيل Windows."
  23. ^ "Unicode". microsoft.com . تم الاسترجاع في 2009-07-20 .
  24. ^ "الشخصيات البديلة والتكميلية". microsoft.com . تم الاسترجاع في 2009-07-20 .
  25. ^ "وصف تخزين بيانات UTF-8 في SQL Server". microsoft.com. 7 ديسمبر 2005. تم الاسترجاع في 2008-02-01 .
  26. ^ "[تم التحديث] تصحيح cmd.exe لنظام التشغيل windows xp لـ cp 65001 - الصفحة 2 - DosTips.com". www.dostips.com . تم الاسترجاع في 2021-06-17 .
  27. ^ "استخدام صفحات أكواد UTF-8 في تطبيقات Windows". learn.microsoft.com . تم الاسترجاع في 2020-06-06 . اعتبارًا من إصدار Windows 1903 (تحديث مايو 2019)، يمكنك استخدام خاصية ActiveCodePage في appxmanifest للتطبيقات المجمعة، أو بيان الاندماج للتطبيقات غير المجمعة، لإجبار عملية على استخدام UTF-8 كصفحة أكواد للعملية. [...] يعادل فقط إذا كان يعمل على إصدار Windows 1903 (تحديث مايو 2019) أو أعلى وكانت خاصية ActiveCodePage الموضحة أعلاه مضبوطة على UTF-8. وإلا، فإنها تحترم صفحة أكواد النظام القديمة. نوصي باستخدامها صراحةً.CP_ACPCP_UTF8CP_UTF8
  28. ^ "دعم UTF-8 في Microsoft Game Development Kit (GDK) - Microsoft Game Development Kit". learn.microsoft.com . تم الاسترجاع في 2023-03-05 . من خلال التشغيل في UTF-8، يمكنك ضمان أقصى قدر من التوافق [..] يعمل Windows بشكل أصلي في UTF-16 (أو WCHAR)، والذي يتطلب تحويلات صفحة التعليمات البرمجية باستخدام MultiByteToWideChar و WideCharToMultiByte. هذا عبء فريد يفرضه Windows على التعليمات البرمجية التي تستهدف منصات متعددة. [..] تتقدم Microsoft Game Development Kit (GDK) وWindows بشكل عام لدعم UTF-8 لإزالة هذا العبء الفريد من نوعه على Windows في استهداف التعليمات البرمجية أو التبادل مع منصات متعددة والويب. كما يؤدي هذا إلى تقليل مشكلات التدويل في التطبيقات والألعاب ويقلل من مصفوفة الاختبار المطلوبة لتصحيح الأمر.
  29. ^ "UCS-2 وعلاقته بـ Unicode (UTF-16)". IBM . تم الاسترجاع في 2019-04-26 .
  30. ^ Selph, Chad (2012-11-08). "مغامرات في الرسائل النصية القصيرة الموحدة". Twilio. مؤرشف من الأصل في 2012-11-09 . تم الاسترجاع في 2015-08-28 .
  31. ^ "PEP 0393 – Flexible String Representation". Python.org . تم الاسترجاع في 2015-05-29 .
  32. ^ "PEP 623 – إزالة wstr من Unicode | peps.python.org". peps.python.org . تم الاسترجاع في 2023-02-24 .
  33. ^ "JEP 400: UTF-8 افتراضيًا". openjdk.org . تم الاسترجاع في 12 مارس 2023 .
  34. ^ "ترميز الأحرف الداخلي في JavaScript: UCS-2 أو UTF-16؟ · Mathias Bynens".
  35. ^ "UTF-8 String". Swift.org . 2019-03-20 . تم الاسترجاع في 2020-08-20 .
  36. ^ "PHP: ترميزات الأحرف المدعومة - دليل". php.net .
  37. ^ "MySQL :: MySQL 8.0 Reference Manual :: 10.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding)". dev.mysql.com . تم الاسترجاع في 2023-02-24 .
  38. ^ "ECMA-334: 9.4.1 Unicode escape sequences". en.csharp-online.net . مؤرشف من الأصل في 2013-02-15.
  39. ^ البنية المعجمية: أخطاء Unicode في "مواصفات لغة Java، الإصدار الثالث". Sun Microsystems, Inc. 2005. تم الاسترجاع في 11 أكتوبر 2019 .
  • خوارزمية قصيرة جدًا لتحديد الزوج البديل لأي نقطة رمز
  • ملاحظة تقنية Unicode رقم 12: UTF-16 للمعالجة
  • الأسئلة الشائعة حول Unicode: ما هو الفرق بين UCS-2 وUTF-16؟
  • فهرس اسم أحرف Unicode
  • RFC 2781: UTF-16، ترميز ISO 10646
  • توثيق java.lang.String، مناقشة التعامل مع البدائل
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=UTF-16&oldid=1245839466"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate