Unicode in Microsoft Windows
মাইক্রোসফ্ট তাদের পণ্যগুলিতে ইউনিকোড প্রয়োগকারী প্রথম সংস্থাগুলির মধ্যে একটি ছিল। উইন্ডোজ এনটি ছিল প্রথম অপারেটিং সিস্টেম যা সিস্টেম কলগুলিতে "ওয়াইড ক্যারেক্টর" ব্যবহার করেছিল। প্রথমে (বর্তমানে অপ্রচলিত) ইউসিএস-2 এনকোডিং স্কিম ব্যবহার করে, এটি উইন্ডোজ 2000 থেকে শুরু করে পরিবর্তনশীল-প্রস্থ এনকোডিং ইউটিএফ-16-এ উন্নীত করা হয়েছিল, যা সারোগেট জোড়া সহ অতিরিক্ত বিমানের প্রতিনিধিত্বের অনুমতি দেয়। তবে মাইক্রোসফ্ট 2019 সালের মে মাস পর্যন্ত তার এপিআই-এ ইউটিএফ-8 সমর্থন করেনি। 2019 সালের আগে, মাইক্রোসফ্ট ইউটিএফ-16-এর উপর জোর দিয়েছিল। - ডাব্লু এপিআই), কিন্তু তারপর থেকে উইন্ডোজ এবং এক্সবক্সে (এবং এর অন্যান্য পণ্যগুলিতে) ইউটিএফ-8 (অন্তত কিছু ক্ষেত্রে) ব্যবহার করার সুপারিশ করা হয়েছে, এমনকি বলা হয়েছে "ইউটিএফ-8 আন্তর্জাতিককরণের জন্য সর্বজনীন কোড পৃষ্ঠা [এবং] ইউটিএফ-16 [.] একটি অনন্য বোঝা যা উইন্ডোজ কোডে রাখে যা একাধিক প্ল্যাটফর্মকে লক্ষ্য করে। [.] উইন্ডোজ ইউটিএফ-8 সমর্থন করার জন্য এগিয়ে চলেছে এই অনন্য বোঝা অপসারণ করতে [ফলস্বরূপ] অ্যাপ এবং গেমগুলিতে কম আন্তর্জাতিককরণের সমস্যা রয়েছে। " মাইক্রোসফ্ট ডকুমেন্টেশনের একটি বড় পরিমাণ ইউটিএফ-16 এনকোডিংকে স্পষ্টভাবে বোঝাতে "ইউনিকোড" শব্দটি ব্যবহার করে। ইউটিএফ-8 সহ অন্য কিছু, মাইক্রোসফ্টের পুরানো ভাষায় "ইউনিকোড" নয় (যেখানে ইউটিএফ-8 এবং ইউটিএফ-16 উভয়ই ইউনিকোড স্ট্যান্ডার্ড অনুসারে ইউনিকোড, বা এর এনকোডিং/"রূপান্তর বিন্যাস")। বিভিন্ন উইন্ডোজ পরিবারে উইন্ডোজ এনটি ভিত্তিক সিস্টেমগুলি বর্তমান উইন্ডোজ সংস্করণগুলি এবং সমস্ত উইন্ডোজ এক্সপি এবং পূর্ববর্তী উইন্ডোজ এনটি (3. x, 4.0) সিস্টেম লাইব্রেরির সাথে প্রেরণ করা হয় যা দুটি ধরণের স্ট্রিং এনকোডিং সমর্থন করেঃ 16-বিট "ইউনিকোড" (উইন্ডোজ 2000 থেকে ইউটিএফ-16) এবং একটি (কখনও কখনও মাল্টিবাইট) এনকোডিং যাকে "কোড পৃষ্ঠা" বলা হয় (বা ভুলভাবে এএনএসআই কোড পৃষ্ঠা হিসাবে উল্লেখ করা হয়)। 16-বিট ফাংশনের নামগুলি 'ডাব্লু' ("ওয়াইড" থেকে) দিয়ে প্রত্যয়িত করা থাকে যেমন সেটউইন্ডো টেক্সট ডাব্লু। কোড পৃষ্ঠা ভিত্তিক ফাংশনগুলি "এএনএসআই"-এর জন্য 'এ' প্রত্যয় ব্যবহার করে যেমন সেটউইন্ডোটেক্সটএ (কিছু অন্যান্য প্রথা অন্যান্য সিস্টেম থেকে অনুলিপি করা এপিআইগুলির জন্য ব্যবহৃত হয়েছিল, যেমন _ ডাব্লুফোপেন/ফোপেন বা ডাব্লুসিএসএলএন/স্ট্রলেন)। এই বিভাজনটি প্রয়োজনীয় ছিল কারণ সি সহ অনেক ভাষা একই ফাংশনে 8-বিট এবং 16-বিট উভয় স্ট্রিং পাস করার একটি পরিষ্কার উপায় সরবরাহ করেনি। মাইক্রোসফ্ট সংকলককে একটি "ইউনিকোড" সুইচ প্রদান করে ইউনিকোডকে "বহনযোগ্যভাবে" সমর্থন করার চেষ্টা করেছিল, যা 'এ' থেকে 'ডব্লিউ' ইন্টারফেসে অনির্ধারিত "জেনেরিক" কলগুলি স্যুইচ করে এবং সমস্ত স্ট্রিং ধ্রুবককে "প্রশস্ত" ইউটিএফ-16 সংস্করণে রূপান্তরিত করে। এটি আসলে কাজ করে না কারণ এটি স্ট্রিং ধ্রুবকের বাইরে ইউটিএফ-8 অনুবাদ করে না, যার ফলে কোডটি কেবল সংকলন না করে ফাইলগুলি খোলার চেষ্টা করে। এর আগে, এবং "ইউনিকোড" সুইচ থেকে স্বাধীন, উইন্ডোজ মাল্টিবাইট ক্যারেক্টর সেট (এমবিসিএস) এপিআই সুইচও সরবরাহ করেছিল। এটি কিছু ফাংশনকে পরিবর্তন করে যা এম. বি. সি. এস-এ কাজ করে না যেমন স্ট্র্রেভ থেকে এম. বি. সি. এস-সচেতন যেমন _ এম. বি. এস. আর. ই. ভি। উইন্ডোজ সিই-তে (বর্তমানে বন্ধ), ইউটিএফ-16 প্রায় একচেটিয়াভাবে ব্যবহৃত হয়েছিল, 'এ' এপিআই বেশিরভাগই অনুপস্থিত ছিল। এএনএসআই এপিআই-এর একটি সীমিত সেট উইন্ডোজ সিই 5-এ পাওয়া যায়, যা রানটাইম ইমেজের উপর নির্বাচিতভাবে নির্মিত হতে পারে এমন লোকেলের একটি হ্রাসকৃত সেটে ব্যবহারের জন্য। 2001 সালে, মাইক্রোসফ্ট মাইক্রোসফ্টের পুরানো উইন্ডোজ 9এক্স সিস্টেমে একটি বিশেষ পরিপূরক প্রকাশ করে। এটিতে একটি গতিশীল লিঙ্ক লাইব্রেরি রয়েছে, 'unicows.dll', (শুধুমাত্র 240 KB) যা উইন্ডোজ API-এর সমস্ত মৌলিক ক্রিয়াকলাপের 16-বিট স্বাদ (শেষে W অক্ষর সহ) ধারণ করে। এটি নিছক একটি অনুবাদ স্তরঃ সেটউইন্ডো টেক্সটডব্লিউ কেবল বর্তমান কোডপেজ ব্যবহার করে তার ইনপুটকে রূপান্তরিত করবে এবং সেটউইন্ডো টেক্সটএ-তে কল করবে। ইউটিএফ-8 মাইক্রোসফ্ট উইন্ডোজ (উইন্ডোজ এক্সপি এবং পরবর্তী)-এর একটি কোড পৃষ্ঠা রয়েছে যা ইউটিএফ-8, কোড পৃষ্ঠা 65001 বা সিপি _ ইউটিএফ8-এর জন্য মনোনীত। দীর্ঘদিন ধরে, স্থানীয় কোড পৃষ্ঠাটি 65001-এ সেট করা অসম্ভব ছিল, যার ফলে এই কোড পৃষ্ঠাটি শুধুমাত্র (ক) মাল্টিবাইট টু ওয়াইডচার এবং/অথবা (খ) ইউটিএফ-8 এবং ইউটিএফ-16-এর মধ্যে স্টিন/আউট অনুবাদ করার জন্য উইন32 কনসোল কমান্ড সিএইচসিপি 65001-এর মতো স্পষ্ট রূপান্তর ফাংশনগুলির জন্য উপলব্ধ ছিল। এর অর্থ ছিল যে "সংকীর্ণ" ফাংশনগুলি, বিশেষত ফোপেন (যা ফাইলগুলি খোলে), ইউটিএফ-8 স্ট্রিং দিয়ে কল করা যায় না এবং প্রকৃতপক্ষে ফোপেন ব্যবহার করে সমস্ত সম্ভাব্য ফাইল খোলার কোনও উপায় ছিল না, তা সে যাই হোক না কেন লোকেলটি সেট করা হয়েছিল এবং/অথবা স্ট্রিংয়ে কোন বাইট রাখা হয়েছিল, কারণ উপলব্ধ লোকেলের কোনওটিই সমস্ত সম্ভাব্য ইউটিএফ-16 অক্ষর তৈরি করতে পারেনি। এই সমস্যাটি সেটউইন্ডো টেক্সটের মতো উইন্ডোজ সহ 8-বিট স্ট্রিং গ্রহণ বা ফেরত দেয় এমন অন্যান্য সমস্ত এপিআই-এর ক্ষেত্রেও প্রযোজ্য। যে প্রোগ্রামগুলি ইউটিএফ-8 ব্যবহার করতে চেয়েছিল, বিশেষত অন্যান্য অপারেটিং সিস্টেমে বহনযোগ্য কোডের জন্য, এই ঘাটতির জন্য একটি সমাধানের প্রয়োজন ছিল। সাধারণ কাজটি ছিল মাল্টিবাইট টু ওয়াইডচার ব্যবহার করে ইউটিএফ-8-কে ইউটিএফ-16-এ রূপান্তরিত করে এবং ফোপেনের পরিবর্তে "ওয়াইড" ফাংশনকে কল করে এমন ফাইলগুলি খোলার জন্য নতুন ফাংশন যুক্ত করা। কয়েক ডজন মাল্টি-প্ল্যাটফর্ম লাইব্রেরি উইন্ডোজে এই রূপান্তরটি করার জন্য মোড়ক ফাংশন যুক্ত করেছে (এবং অন্যদের উপর অপরিবর্তিত মাধ্যমে ইউটিএফ-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 স্ট্রিং ধ্রুবক তৈরি করতে ব্যর্থ হয়। সবচেয়ে নির্ভরযোগ্য পদ্ধতি হল UNICODE বন্ধ করা, ইনপুট ফাইলটিকে UTF-8 হিসাবে চিহ্নিত না করা (অর্থাৎ। একটি বিওএম ব্যবহার করবেন না), এবং স্ট্রিং ধ্রুবকগুলিকে ইউটিএফ-8 বাইটে সাজান। যদি একটি বিওএম যোগ করা হয়, একটি মাইক্রোসফ্ট সংকলক স্ট্রিংগুলিকে ইউটিএফ-8 হিসাবে ব্যাখ্যা করবে, সেগুলিকে ইউটিএফ-16-এ রূপান্তরিত করবে, তারপরে সেগুলিকে বর্তমান লোকেলে রূপান্তরিত করবে, এইভাবে ইউটিএফ-8 ধ্বংস করবে। বি. ও. এম ছাড়া এবং একক-বাইট লোকেল ব্যবহার করে, মাইক্রোসফ্ট কম্পাইলারগুলি উদ্ধৃত স্ট্রিংয়ে বাইটগুলি অপরিবর্তিত রাখবে। আধুনিক সিস্টেমে কোড পৃষ্ঠাকে ইউটিএফ-8-এ সেট করা যথেষ্ট সাহায্য করে, তবে অবৈধ বাইট সিকোয়েন্সগুলি এখনও সংরক্ষণ করা হয় না (এর চারপাশে কাজ করতে পারে)। আরও দেখুন বুশ ঘটনাগুলি লুকিয়ে রেখেছিলেন, একটি টেক্সট এনকোডিং মোজিবেক নোটস রেফারেন্স এক্সটার্নাল লিঙ্ক ইউনিকোড মাইক্রোসফ্ট উইন্ডোজ