Unicode in Microsoft Windows
مائیکروسافٹ ان پہلی کمپنیوں میں سے ایک تھی جنہوں نے اپنی مصنوعات میں یونیکوڈ کو نافذ کیا۔ ونڈوز این ٹی پہلا آپریٹنگ سسٹم تھا جس نے سسٹم کالز میں "وسیع حروف" کا استعمال کیا۔ شروع میں (اب متروک) یو سی ایس-2 انکوڈنگ اسکیم کا استعمال کرتے ہوئے، اسے ونڈوز 2000 سے شروع ہونے والے متغیر چوڑائی انکوڈنگ یو ٹی ایف-16 میں اپ گریڈ کیا گیا، جس سے سروگیٹ جوڑوں کے ساتھ اضافی طیاروں کی نمائندگی کی اجازت ملتی ہے۔ تاہم مائیکروسافٹ نے مئی 2019 تک اپنے اے پی آئی میں یو ٹی ایف-8 کی حمایت نہیں کی تھی۔ 2019 سے پہلے مائیکروسافٹ نے یو ٹی ایف-16 پر زور دیا (یعنی۔ - ڈبلیو اے پی آئی)، لیکن اس کے بعد سے ونڈوز اور ایکس بکس (اور اس کی دیگر مصنوعات میں) پر یو ٹی ایف-8 (کم از کم کچھ معاملات میں) استعمال کرنے کی سفارش کی گئی ہے، یہاں تک کہ یہ بھی کہا گیا ہے کہ "یو ٹی ایف-8 بین الاقوامی کاری کے لیے عالمگیر کوڈ پیج ہے [اور] یو ٹی ایف-16 [.] ایک منفرد بوجھ ہے جو ونڈوز کوڈ پر رکھتا ہے جو متعدد پلیٹ فارمز کو نشانہ بناتا ہے۔ [.] ونڈوز اس منفرد بوجھ کو دور کرنے کے لیے UTF-8 کی حمایت کرنے کے لیے آگے بڑھ رہی ہے [جس کے نتیجے میں] ایپس اور گیمز میں بین الاقوامی کاری کے مسائل کم ہو رہے ہیں۔ " مائیکروسافٹ دستاویزات کی ایک بڑی مقدار واضح طور پر یو ٹی ایف-16 انکوڈنگ کا حوالہ دینے کے لیے لفظ "یونیکوڈ" کا استعمال کرتی ہے۔ یو ٹی ایف-8 سمیت کوئی بھی چیز مائیکروسافٹ کی پرانی زبان میں "یونیکوڈ" نہیں ہے (جبکہ یو ٹی ایف-8 اور یو ٹی ایف-16 دونوں یونیکوڈ اسٹینڈرڈ کے مطابق یونیکوڈ ہیں، یا یونیکوڈ کے انکوڈنگ/"ٹرانسفارمیشن فارمیٹس" ہیں)۔ مختلف ونڈوز خاندانوں میں ونڈوز این ٹی پر مبنی نظام موجودہ ونڈوز ورژن اور تمام ونڈوز ایکس پی اور سابقہ ونڈوز این ٹی (3. x, 4.0) کو سسٹم لائبریریوں کے ساتھ بھیج دیا جاتا ہے جو دو اقسام کی سٹرنگ انکوڈنگ کی حمایت کرتے ہیں: 16 بٹ "یونیکوڈ" (ونڈوز 2000 کے بعد سے یو ٹی ایف-16) اور ایک (بعض اوقات ملٹی بائٹ) انکوڈنگ جسے "کوڈ پیج" کہا جاتا ہے (یا غلط طور پر اے این ایس آئی کوڈ پیج کہا جاتا ہے)۔ 16 بٹ فنکشنز کے نام 'W' ("وائڈ" سے) کے ساتھ منسلک ہوتے ہیں جیسے کہ سیٹ ونڈو ٹیکسٹ ڈبلیو۔ کوڈ پیج پر مبنی افعال "اے این ایس آئی" کے لیے لاحقہ "اے" کا استعمال کرتے ہیں جیسے کہ سیٹ ونڈو ٹیکسٹ اے (کچھ دیگر کنونشن ایسے اے پی آئی کے لیے استعمال کیے گئے تھے جو دوسرے سسٹمز سے کاپی کیے گئے تھے، جیسے کہ _ ڈبلیو ایف او پی این/ایف او پی این یا ڈبلیو سی ایس ایل این/اسٹرلن)۔ یہ تقسیم ضروری تھی کیونکہ سی سمیت بہت سی زبانوں نے 8 بٹ اور 16 بٹ دونوں تاروں کو ایک ہی فنکشن میں منتقل کرنے کا صاف طریقہ فراہم نہیں کیا۔ مائیکروسافٹ نے مرتب کرنے والے کو "یونیکوڈ" سوئچ فراہم کرکے یونیکوڈ کو "پورٹیبل طور پر" سپورٹ کرنے کی کوشش کی، جو "اے" سے "ڈبلیو" انٹرفیس پر غیر محفوظ شدہ "عام" کالوں کو تبدیل کرتا ہے اور تمام سٹرنگ مستقل کو "وسیع" یو ٹی ایف-16 ورژن میں تبدیل کرتا ہے۔ یہ اصل میں کام نہیں کرتا ہے کیونکہ یہ یو ٹی ایف-8 کا ترجمہ سٹرنگ مستقل سے باہر نہیں کرتا ہے، جس کے نتیجے میں کوڈ ہوتا ہے جو فائلوں کو کھولنے کی کوشش کرتا ہے لیکن مرتب نہیں کرتا ہے۔ اس سے پہلے، اور "یونیکوڈ" سوئچ سے آزاد، ونڈوز نے ملٹی بائٹ کریکٹر سیٹس (ایم بی سی ایس) اے پی آئی سوئچ بھی فراہم کیا۔ یہ کچھ افعال کو تبدیل کرتا ہے جو ایم بی سی ایس میں کام نہیں کرتے ہیں جیسے کہ اسٹریو سے ایم بی سی ایس سے آگاہ ایک جیسے _ ایم بی ایس ریو۔ ونڈوز سی ای (اب بند شدہ) ونڈوز سی ای میں، یو ٹی ایف-16 تقریبا خصوصی طور پر استعمال کیا گیا تھا، جس میں 'اے' اے پی آئی زیادہ تر غائب تھا۔ ونڈوز سی ای 5 میں اے این ایس آئی اے پی آئی کا ایک محدود سیٹ دستیاب ہے، جو لوکلز کے کم سیٹ پر استعمال کے لیے ہے جسے رن ٹائم امیج پر منتخب طور پر بنایا جا سکتا ہے۔ 2001 میں مائیکروسافٹ نے مائیکروسافٹ کے پرانے ونڈوز 9 ایکس سسٹمز کے لیے ایک خصوصی ضمیمہ جاری کیا۔ اس میں ایک متحرک لنک لائبریری شامل ہے، 'unicows.dll'، (صرف 240 KB) جس میں ونڈوز API کے تمام بنیادی افعال کا 16 بٹ ذائقہ (آخر میں حرف W والا) ہوتا ہے۔ یہ محض ایک ترجمہ پرت ہے: سیٹ ونڈو ٹیکسٹ ڈبلیو صرف موجودہ کوڈ پیج کا استعمال کرتے ہوئے اپنے ان پٹ کو تبدیل کرے گا اور سیٹ ونڈو ٹیکسٹا کو کال کرے گا۔ یو ٹی ایف-8 مائیکروسافٹ ونڈوز (ونڈوز ایکس پی اور اس کے بعد کے) میں یو ٹی ایف-8، کوڈ پیج 65001 یا سی پی _ یو ٹی ایف 8 کے لیے ایک کوڈ پیج ہے۔ ایک طویل عرصے تک، لوکل کوڈ پیج کو 65001 پر سیٹ کرنا ناممکن تھا، اس کوڈ پیج کو صرف (a) ملٹی بائٹ ٹو وائڈچار اور/یا (b) UTF-8 اور UTF-16 کے درمیان اسٹین/آؤٹ کا ترجمہ کرنے کے لیے ون 32 کنسول کمانڈ chcp 65001 جیسے واضح تبادلوں کے افعال کے لیے دستیاب تھا۔ اس کا مطلب یہ تھا کہ "تنگ" افعال، خاص طور پر فوپین (جو فائلیں کھولتا ہے)، کو یو ٹی ایف-8 سٹرنگز کے ساتھ کال نہیں کیا جا سکتا تھا، اور حقیقت میں فوپین کا استعمال کرتے ہوئے تمام ممکنہ فائلوں کو کھولنے کا کوئی طریقہ نہیں تھا اس سے کوئی فرق نہیں پڑتا تھا کہ لوکل کس پر سیٹ کیا گیا تھا اور/یا سٹرنگ میں کون سے بائٹس رکھے گئے تھے، کیونکہ دستیاب لوکلز میں سے کوئی بھی تمام ممکنہ یو ٹی ایف-16 حروف پیدا نہیں کر سکتا تھا۔ یہ مسئلہ دیگر تمام APIs پر بھی لاگو ہوتا ہے جو 8 بٹ سٹرنگ لیتے ہیں یا واپس کرتے ہیں، بشمول ونڈوز والے جیسے سیٹ ونڈو ٹیکسٹ۔ وہ پروگرام جو یو ٹی ایف-8 استعمال کرنا چاہتے تھے، خاص طور پر کوڈ جس کا مقصد دوسرے آپریٹنگ سسٹمز کے لیے پورٹیبل ہونا تھا، اس کمی کے لیے ایک حل کی ضرورت تھی۔ عام کام کے ارد گرد فائلوں کو کھولنے کے لیے نئے افعال شامل کرنا تھا جو ملٹی بائٹ ٹو وائڈچار کا استعمال کرتے ہوئے یو ٹی ایف-8 کو یو ٹی ایف-16 میں تبدیل کرتے ہیں اور فوپین کے بجائے "وائڈ" فنکشن کو کال کرتے ہیں۔ درجنوں ملٹی پلیٹ فارم لائبریریوں نے ونڈوز پر یہ تبدیلی کرنے کے لیے ریپر فنکشنز کو شامل کیا (اور دوسروں پر غیر تبدیل شدہ کے ذریعے UTF-8 کو پاس کیا)، ایک مثال بوسٹ کے لیے ایک مجوزہ اضافہ ہے،۔ ایک اور مقبول کام نام کو 8.3 فائل نام کے مساوی میں تبدیل کرنا تھا، یہ ضروری ہے اگر فوپین لائبریری کے اندر ہو۔ ان میں سے کوئی بھی حل اچھا نہیں سمجھا جاتا ہے، کیونکہ انہیں غیر ونڈوز پر کام کرنے والے کوڈ میں تبدیلیوں کی ضرورت ہوتی ہے۔ اپریل 2018 (یا ممکنہ طور پر نومبر 2017) میں، ونڈوز 10 کے لیے انسائیڈر بلڈ 17035 (برائے نام بلڈ 17134) کے ساتھ، لوکل کوڈ پیج کو یو ٹی ایف-8 پر ترتیب دینے کے لیے ایک "بیٹا: دنیا بھر میں زبان کی حمایت کے لیے یونیکوڈ یو ٹی ایف-8 کا استعمال کریں" چیک باکس نمودار ہوا۔ یہ یو ٹی ایف-8 سٹرنگ کے ساتھ فوپین اور سیٹ ونڈو ٹیکسٹا سمیت "تنگ" فنکشنز کو کال کرنے کی اجازت دیتا ہے۔ تاہم یہ ایک سسٹم وسیع ترتیب ہے اور کوئی پروگرام یہ نہیں مان سکتا کہ یہ سیٹ ہے۔ مئی 2019 میں، مائیکروسافٹ نے ایک پروگرام کے لیے کوڈ پیج کو خود یو ٹی ایف-8 پر سیٹ کرنے کی صلاحیت شامل کی، جس سے یو ٹی ایف-8 کو استعمال کرنے کے لیے لکھے گئے پروگراموں کو غیر ماہر صارفین کے ذریعے چلانے کی اجازت ملی۔ مائیکروسافٹ تجویز کرتا ہے کہ پروگرامر یو ٹی ایف-8 استعمال کریں (مثال کے طور پر۔ ونڈوز اور ایکس بکس پر کسی بھی دوسرے 8 بٹ انکوڈنگ کے بجائے)، اور یو ٹی ایف-16 کے بجائے اس کے استعمال کی سفارش کی جا سکتی ہے، یہاں تک کہ یہ کہتے ہوئے کہ "یو ٹی ایف-8 بین الاقوامی کاری کے لیے عالمگیر کوڈ پیج ہے [اور] یو ٹی ایف-16 [.] ایک منفرد بوجھ ہے جسے ونڈوز کوڈ پر رکھتا ہے جو متعدد پلیٹ فارمز کو نشانہ بناتا ہے۔" ایسا لگتا ہے کہ مائیکروسافٹ یو ٹی ایف-8 میں منتقلی کر رہا ہے، یہ کہتے ہوئے کہ اس نے پہلے اس کے متبادل پر زور دیا تھا، اور ونڈوز 11 میں کچھ سسٹم فائلوں کو یو ٹی ایف-8 استعمال کرنے کی ضرورت ہوتی ہے اور اسے بائٹ آرڈر مارک کی ضرورت نہیں ہوتی ہے۔ نوٹ پیڈ اب بائٹ آرڈر مارک کے بغیر یو ٹی ایف-8 کو پہچان سکتا ہے، اور اسے بائٹ آرڈر مارک کے بغیر یو ٹی ایف-8 لکھنے کے لیے کہا جا سکتا ہے۔ مائیکروسافٹ کی کچھ دیگر مصنوعات اندرونی طور پر یو ٹی ایف-8 کا استعمال کر رہی ہیں، بشمول ویژول اسٹوڈیو اور ان کے ایس کیو ایل سرور 2019، مائیکروسافٹ کا دعوی ہے کہ یو ٹی ایف-8 کے استعمال سے رفتار میں 35 فیصد اضافہ ہوا ہے، اور "اسٹوریج کی ضروریات میں تقریبا 50 فیصد کمی" ہوئی ہے۔ پروگرامنگ پلیٹ فارم مائیکروسافٹ کے مرتب اکثر یو ٹی ایف-8 سورس فائلوں سے یو ٹی ایف-8 سٹرنگ مستقل تیار کرنے میں ناکام رہتے ہیں۔ سب سے زیادہ قابل اعتماد طریقہ یہ ہے کہ یونیکوڈ کو بند کر دیا جائے، ان پٹ فائل کو یو ٹی ایف-8 کے طور پر نشان زد نہ کیا جائے (یعنی۔ BOM) کا استعمال نہ کریں، اور سٹرنگ کے مستقلات کو UTF-8 بائٹس کے لیے ترتیب دیں۔ اگر ایک BOM شامل کیا گیا تھا، تو مائیکروسافٹ مرتب تاروں کی تشریح UTF-8 کے طور پر کرے گا، انہیں UTF-16 میں تبدیل کرے گا، پھر انہیں موجودہ لوکل میں واپس تبدیل کرے گا، اس طرح UTF-8 کو تباہ کر دے گا۔ بی او ایم کے بغیر اور سنگل بائٹ لوکل کا استعمال کرتے ہوئے، مائیکروسافٹ مرتب بائٹس کو ایک حوالہ شدہ سٹرنگ میں بغیر کسی تبدیلی کے چھوڑ دیں گے۔ جدید سسٹمز پر کوڈ پیج کو یو ٹی ایف-8 پر ترتیب دینے سے کافی مدد ملتی ہے، لیکن غلط بائٹ کے سلسلے اب بھی محفوظ نہیں ہیں (اس کے ارد گرد کام کر سکتے ہیں)۔ یہ بھی دیکھیں کہ بش نے حقائق چھپائے، ایک ٹیکسٹ انکوڈنگ موجی بیک نوٹس حوالہ جات بیرونی لنکس یونیکوڈ مائیکروسافٹ ونڈوز