يونيكود في نظام التشغيل مايكروسوفت ويندوز
كانت مايكروسوفت من أوائل الشركات التي طبقت ترميز يونيكود في منتجاتها. وكان نظام التشغيل ويندوز إن تي أول نظام تشغيل يستخدم "الأحرف العريضة" في استدعاءات النظام . في البداية، استخدم نظام ترميز UCS-2 (الذي أصبح الآن قديمًا) ، ثم جرى تحديثه إلى ترميز UTF-16 ذي العرض المتغير بدءًا من ويندوز 2000 ، مما أتاح تمثيل مستويات إضافية باستخدام أزواج بديلة. مع ذلك، لم تدعم مايكروسوفت ترميز UTF-8 حتى مايو 2019.
تستخدم الكثير من وثائق مايكروسوفت مصطلح "يونيكود" للإشارة تحديدًا إلى ترميز UTF-16. أما أي ترميز آخر، بما في ذلك UTF-8، فلا يُعتبر "يونيكود" وفقًا لمصطلحات مايكروسوفت القديمة (مع العلم أن UTF-8 وUTF-16 كلاهما يُعتبران يونيكود وفقًا لمعيار يونيكود ، أو ترميزات/تنسيقات تحويل تابعة له).
في مختلف عائلات ويندوز
أنظمة ويندوز NTRY
تأتي إصدارات ويندوز الحالية، بالإضافة إلى ويندوز XP والإصدارات السابقة من ويندوز NT (3.x، 4.0)، مزودة بمكتبات نظام تدعم ترميز السلاسل النصية بنوعين: ترميز "يونيكود" ذو 16 بت ( UTF-16 منذ ويندوز 2000 )، وترميز (متعدد البايتات أحيانًا) يُسمى " صفحة الترميز " (أو يُشار إليه خطأً باسم صفحة ترميز ANSI ). تُلحق أسماء الدوال ذات 16 بت بالحرف "W" (اختصارًا لـ "wide" ) SetWindowTextW. أما الدوال الموجهة لصفحة الترميز فتستخدم اللاحقة "A" لـ "ANSI" ( استُخدمتSetWindowTextA بعض الاصطلاحات الأخرى لواجهات برمجة التطبيقات المنسوخة من أنظمة أخرى، مثل ` _wfopen/fopen/usr/local wcslen/strlen...
حاولت مايكروسوفت دعم يونيكود "بشكل قابل للنقل" من خلال توفير خيار "UNICODE" للمترجم ، والذي يحوّل استدعاءات الدوال "العامة" غير الملحقة من واجهة "A" إلى واجهة "W"، ويحوّل جميع ثوابت السلاسل النصية إلى إصدارات UTF-16 "العريضة". [ 1 ] [ 2 ] لكن هذا لا ينجح فعليًا لأنه لا يترجم UTF-8 خارج ثوابت السلاسل النصية، مما يؤدي إلى فشل تجميع التعليمات البرمجية التي تحاول فتح الملفات.
في السابق، وبشكل مستقل عن خيار "UNICODE"، وفر نظام ويندوز أيضًا خيار واجهة برمجة تطبيقات مجموعات الأحرف متعددة البايت (MBCS). [ 3 ] يُغيّر هذا الخيار بعض الوظائف التي لا تعمل في MBCS، مثل strrevوظيفة معينة، إلى وظيفة أخرى متوافقة مع MBCS _mbsrev. [ 4 ] [ 5 ]
ويندوز سي إي
في نظام التشغيل Windows CE (الذي توقف دعمه الآن) ، كان ترميز UTF-16 يُستخدم بشكل شبه حصري، مع غياب واجهة برمجة التطبيقات 'A' في معظم الأحيان. [ 6 ] تتوفر مجموعة محدودة من واجهة برمجة تطبيقات ANSI في Windows CE 5.0 ، لاستخدامها مع مجموعة محدودة من اللغات التي يمكن تضمينها بشكل انتقائي في صورة وقت التشغيل. [ 7 ]
ويندوز 9x
في عام 2001، أصدرت مايكروسوفت ملحقًا خاصًا لأنظمة ويندوز 9x القديمة ، وُصف بأنه يوفر "طبقة فوق واجهة برمجة تطبيقات Win32 على أنظمة ويندوز 95/98/Me، بحيث يتمكن مطور البرامج من كتابة نسخة يونيكود واحدة من تطبيقه وتشغيلها بشكل صحيح على جميع المنصات". [ 8 ] يتضمن هذا الملحق مكتبة ارتباط ديناميكي، 'unicows.dll'، (بحجم 240 كيلوبايت فقط) تحتوي على نسخة 16 بت (التي تنتهي بالحرف W) من جميع الوظائف الأساسية لواجهة برمجة تطبيقات ويندوز. وهي مجرد طبقة ترجمة: SetWindowTextWحيث تقوم بتحويل مدخلاتها باستخدام صفحة الترميز الحالية واستدعاءها SetWindowTextAعلى أنظمة ويندوز 9x، بينما تقوم أنظمة ويندوز NT بتمريرها إلى نسخة نظام التشغيل SetWindowTextW.
توجد بدائل، من بينها OPENCOW.DLL ، " الطبقة المفتوحة لليونيكود لنظام ويندوز "، وهي إعادة تنفيذ مجانية ( مرخصة بموجب MPL 1.1/ GPL 2.0/ LGPL 2.1) لـ MSLU من موزيلا . كما تتوفر إصدارات مفتوحة المصدر من مكتبة الربط UNICOWS.LIB ، والتي يمكن استخدامها مع UNICOWS.DLL الأصلية أو OPENCOW.DLL . [ 9 ]
UTF-8
يحتوي نظام التشغيل مايكروسوفت ويندوز ( ويندوز إكس بي والإصدارات الأحدث) على صفحة ترميز مخصصة لترميز UTF-8 ، وهي صفحة الترميز 65001 [ 10 ]CP_UTF8 . لفترة طويلة، كان من المستحيل ضبط صفحة الترميز المحلية على 65001، مما جعل هذه الصفحة متاحة فقط لـ: أ) دوال التحويل الصريحة مثل MultiByteToWideChar و/أو ب) أمر وحدة تحكم Win32chcp 65001 لترجمة المدخلات/المخرجات القياسية بين UTF-8 وUTF-16. هذا يعني أنه fopenلا يمكن استدعاء الدوال "الضيقة"، على وجه الخصوص (التي تفتح الملفات)، باستخدام سلاسل UTF-8، وفي الواقع لم تكن هناك طريقة لفتح جميع الملفات الممكنة fopenبغض النظر عن اللغة المحلية المُعينة و/أو البايتات المُدخلة في السلسلة، حيث لم تتمكن أي من اللغات المحلية المتاحة من إنتاج جميع أحرف UTF-16 الممكنة. تنطبق هذه المشكلة أيضًا على جميع واجهات برمجة التطبيقات الأخرى التي تأخذ أو تُرجع سلاسل 8 بت، بما في ذلك واجهات ويندوز مثل SetWindowText.
كانت البرامج التي ترغب في استخدام ترميز UTF-8، وخاصةً البرامج المصممة لتكون قابلة للنقل إلى أنظمة تشغيل أخرى، بحاجة إلى حل بديل لهذا القصور. كان الحل المعتاد هو إضافة دوال جديدة لفتح الملفات تقوم بتحويل UTF-8 إلى UTF-16 باستخدام MultiByteToWideChar واستدعاء الدالة "wide" بدلاً من ذلك fopen. [ 11 ] أضافت عشرات المكتبات متعددة المنصات دوالًا وسيطة لإجراء هذا التحويل على نظام Windows (وتمرير UTF-8 دون تغيير على الأنظمة الأخرى)، ومن الأمثلة على ذلك إضافة مقترحة إلى مكتبة Boost ، وهي Boost.Nowide . [ 12 ] كان من الحلول الشائعة الأخرى تحويل اسم الملف إلى ما يعادله في الإصدار 8.3 ، وهذا ضروري إذا كان الملف موجودًا داخل مكتبة. لا يُعتبر أي من هذه الحلول جيدًا، لأنها تتطلب تغييرات في الكود الذي يعمل على أنظمة غير Windows.fopen
في أبريل 2018 (أو ربما نوفمبر 2017 [ 13 ] )، مع الإصدار التجريبي 17035 (الإصدار الرسمي 17134) لنظام التشغيل Windows 10 ، ظهر مربع اختيار "تجريبي: استخدام Unicode UTF-8 لدعم اللغات العالمية" لضبط صفحة ترميز اللغة إلى UTF-8. [ أ ] يتيح هذا استدعاء الدوال "المحدودة"، بما في ذلك fopenالدوال SetWindowTextA، باستخدام سلاسل UTF-8. مع ذلك، يُعد هذا إعدادًا على مستوى النظام، ولا يمكن لأي برنامج افتراض أنه مُفعّل.
في مايو 2019، أضافت مايكروسوفت ميزةً تُمكّن البرامج من ضبط صفحة الترميز تلقائيًا على UTF-8، [ 14 ] [ 15 ] مما يسمح بتشغيل البرامج المصممة لاستخدام UTF-8 من قِبل المستخدمين غير المتخصصين. تدعم جميع إصدارات ويندوز المخصصة للمستهلكين حاليًا UTF-8 بهذه الطريقة، بالإضافة إلى إصدارات المؤسسات الحديثة، وويندوز سيرفر 2019 والإصدارات الأحدث، مثل ويندوز 10 IoT Enterprise 2021 LTSC.
اعتبارًا من عام 2019توصي مايكروسوفت المبرمجين باستخدام ترميز UTF-8 (على الأقل في بعض الحالات) [ 14 ] على نظامي التشغيل ويندوز وإكس بوكس ، بل وتؤكد أن "UTF-8 هو ترميز عالمي للتدويل، بينما يمثل UTF-16 عبئًا إضافيًا يفرضه ويندوز على البرامج التي تستهدف منصات متعددة." [ 16 ] ويبدو أن مايكروسوفت بصدد الانتقال إلى UTF-8، إذ سبق لها أن أكدت على بديلها، وفي ويندوز 11، يُشترط استخدام UTF-8 في بعض ملفات النظام [ 17 ] ، ولا يتطلب ذلك وجود علامة ترتيب البايتات (BOM) في بدايتها للدلالة على أنها مكتوبة بهذا الترميز. ويمكن لبرنامج المفكرة الآن التعرف على UTF-8 بدون علامة BOM، كما يمكن ضبطه لكتابة UTF-8 بدونها. تستخدم بعض منتجات مايكروسوفت الأخرى ترميز UTF-8 داخليًا، بما في ذلك Visual Studio [ 18 ] [ 19 ] و SQL Server 2019 ، حيث تدعي مايكروسوفت زيادة في السرعة بنسبة 35٪ من استخدام UTF-8، و"انخفاضًا بنسبة 50٪ تقريبًا في متطلبات التخزين". [ 20 ]
الثوابت النصية في Visual Studio
قبل عام ٢٠١٩، لم تكن مُجمِّعات مايكروسوفت قادرة على إنتاج ثوابت سلاسل UTF-8 من ملفات مصدر UTF-8. ويعود ذلك إلى تحويلها جميع السلاسل إلى صفحة ترميز اللغة المحلية (التي لا يمكن أن تكون UTF-8). في السابق، كانت الطريقة الوحيدة لتجاوز هذه المشكلة هي تعطيل يونيكود ، وعدم تحديد ملف الإدخال على أنه UTF-8 (أي عدم استخدام علامة ترتيب البايتات). [ ٢١ ] من شأن ذلك أن يجعل المُجمِّع يعتقد أن كلاً من المدخلات والمخرجات بنفس اللغة المحلية أحادية البايت، وبالتالي يترك السلاسل دون تغيير.
انظر أيضاً
- أخفى بوش الحقائق ، وهو نص مشفر برموز متداخلة.
ملحوظات
- ↑ موجود ضمن لوحة التحكم، إدخال "المنطقة"، علامة التبويب "إداري"، زر "تغيير لغة النظام".
مراجع
- ↑ "Unicode في واجهة برمجة تطبيقات Windows" . تم الاطلاع عليه بتاريخ 7 مايو 2018 .
- ↑ "اتفاقيات نماذج الوظائف (ويندوز)" . MSDN . تم الاطلاع عليه في 7 مايو 2018 .
- ↑ "دعم مجموعات الأحرف متعددة البايت (MBCSs)" . تم الاطلاع عليه بتاريخ 15-06-2020 .
- ↑ "مجموعات الأحرف ثنائية البايت" . MSDN . 31-05-2018 . تم الاطلاع عليه بتاريخ 15-06-2020 .
تستخدم تطبيقاتنا صفحات ترميز DBCS لنظام Windows مع إصدارات "A" من وظائف Windows.
- ↑ _strrev، _wcsrev، _mbsrev، _mbsrev_l مستندات مايكروسوفت
- ↑ " الاختلافات بين تطبيقَي TAPI في نظامي التشغيل Windows CE وWindows NT" . MSDN . 28 أغسطس 2006. تاريخ الاطلاع: 7 مايو 2018.
نظام Windows CE يعتمد على Unicode. قد تحتاج إلى إعادة تجميع الشفرة المصدرية المكتوبة لتطبيق يعمل بنظام Windows NT.
- ↑ "صفحات الترميز (Windows CE 5.0)" . وثائق مايكروسوفت . 14 سبتمبر 2012. تم الاطلاع عليه في 7 مايو 2018 .
- ↑ "طبقة مايكروسوفت لليونيكود على أنظمة ويندوز 95/98/Me" . بوابة التطوير والحوسبة العالمية . مايكروسوفت . مؤرشف من الأصل بتاريخ 16 أبريل 2003. تم الاطلاع عليه بتاريخ 25 أبريل 2019 .
- ↑ "libunicows" . تم الاسترجاع بتاريخ 2025-09-06 .
- ↑ "معرفات صفحة الترميز (ويندوز)" . msdn.microsoft.com . 7 يناير 2021.
- ↑ "UTF-8 في نظام ويندوز" . موقع ستاك أوفرفلو . تم الاطلاع عليه في 1 يوليو 2011 .
- ↑ "Boost.Nowide" . GitHub .
- ↑ "يدعم الإصدار التجريبي 17035 من برنامج Windows 10 Insider ترميز UTF-8 كـ ANSI" . Hacker News . تم الاطلاع عليه بتاريخ 7 مايو 2018 .
- ١ ٢ "استخدام صفحات ترميز 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 - ↑ "يدعم نظام التشغيل Windows 10 الإصدار 1903 والإصدارات الأحدث أخيرًا ترميز UTF-8 مع أشكال A لوظائف Win32" .
- ↑ "دعم UTF-8 في حزمة تطوير ألعاب مايكروسوفت (GDK) - حزمة تطوير ألعاب مايكروسوفت" . learn.microsoft.com . ١٩ أغسطس ٢٠٢٢. تاريخ الاطلاع: ٥ مارس ٢٠٢٣.
من خلال العمل بنظام UTF-8، يمكنك ضمان أقصى قدر من التوافق [...] يعمل نظام ويندوز بشكل أصلي بنظام UTF-16 (أو WCHAR)، مما يتطلب تحويلات صفحات الترميز باستخدام MultiByteToWideChar و WideCharToMultiByte. يُمثل هذا عبئًا فريدًا يفرضه ويندوز على التعليمات البرمجية التي تستهدف منصات متعددة. [...] تتجه حزمة تطوير ألعاب مايكروسوفت (GDK) ونظام ويندوز بشكل عام نحو دعم UTF-8 لإزالة هذا العبء الفريد الذي يفرضه ويندوز على التعليمات البرمجية التي تستهدف أو تتبادل مع منصات متعددة والويب. كما يؤدي ذلك إلى تقليل مشكلات التدويل في التطبيقات والألعاب، ويقلل من مصفوفة الاختبار المطلوبة لضمان التوافق.
- ↑ "تخصيص قائمة ابدأ في ويندوز 11" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 29-06-2021 .
تأكد من أن ملف LayoutModification.json يستخدم ترميز UTF-8.
- ↑ "خيارات جديدة لإدارة مجموعات الأحرف في مُصرّف Microsoft C/C++" . devblogs.microsoft.com . 22 فبراير 2016.
في وقتٍ ما، تم تغيير مُصرّف Microsoft لاستخدام ترميز UTF-8 داخليًا. لذا، عند قراءة الملفات من القرص، يتم تحويلها إلى UTF-8 تلقائيًا.
- ↑ "validate-charset (التحقق من توافق الأحرف)" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 19-07-2021 .
يستخدم Visual Studio ترميز UTF-8 كترميز داخلي للأحرف أثناء التحويل بين مجموعة الأحرف المصدرية ومجموعة أحرف التنفيذ.
- ↑ "تقديم دعم UTF-8 لـ SQL Server" . techcommunity.microsoft.com . 2019-07-02 . تم الاطلاع عليه بتاريخ 2021-08-24 .
على سبيل المثال، يؤدي تغيير نوع بيانات عمود موجود من NCHAR(10) إلى CHAR(10) باستخدام ترتيب UTF-8 إلى تقليل متطلبات التخزين بنسبة 50% تقريبًا. [...] في نطاق ASCII، عند إجراء عمليات قراءة/كتابة مكثفة على UTF-8، قمنا بقياس تحسن في الأداء بنسبة 35% في المتوسط مقارنةً بـ UTF-16 باستخدام جداول مجمعة مع فهرس غير مجمع على عمود السلسلة، وتحسن في الأداء بنسبة 11% في المتوسط مقارنةً بـ UTF-16 باستخدام كومة.
- ↑ أسئلة شائعة حول ترميز UTF-8 في كل مكان: كيف أكتب سلسلة نصية بتنسيق UTF-8 في كود C++ الخاص بي؟ (لاحظ أن الحل المقترح u8"text" لا يعمل، فالسلسلة النصية لا تزال مشوهة).
روابط خارجية
- "يونيكود" . MSDN . مايكروسوفت . تم الاطلاع عليه بتاريخ 10 نوفمبر 2016 .
- تقنية ويندوز
- يونيكود
