আপনি সোশ্যাল মিডিয়ার বাজারে খুব খুব ছোট পোস্টের একটি ফাঁক খুঁজে পেয়েছেন। এখন Twitter ২৮০ ক্যারেক্টারের পোস্টের অনুমতি দেওয়ায়, দ্রুত সোশ্যাল মিডিয়া আপডেট চাওয়া মানুষদের চাহিদা পূরণ হচ্ছে না। আপনি নিজের একটি সোশ্যাল মিডিয়া নেটওয়ার্ক বানানোর সিদ্ধান্ত নিলেন।
আপনার প্রোডাক্টকে উল্লেখযোগ্য করে তুলতে আপনি এটিকে চরম পর্যায়ে নিয়ে যান এবং কেবল ৫টি বা তার কম ক্যারেক্টারের পোস্টের অনুমতি দেন। ৫ ক্যারেক্টারের বেশি যেকোনো পোস্ট ৫ ক্যারেক্টারে ছেঁটে দেওয়া উচিত।
আপনার ইউজাররা যাতে নিজেদের পূর্ণভাবে প্রকাশ করতে পারে, সেজন্য আপনি ইমোজি আর অন্যান্য ইউনিকোডের অনুমতি দেন।
কাজটি হলো ইনপুট স্ট্রিংগুলোকে ৫ ক্যারেক্টারে ছেঁটে দেওয়া।
ডিজিটালভাবে সংরক্ষিত টেক্সটকে বাইটের একটি ধারায় রূপান্তর করতে হয়। ক্যারেক্টারকে বাইটে ম্যাপ করার তিনটি প্রচলিত উপায় আছে।
UTF-8 আর UTF-16 দুটোই ইউনিকোড এনকোডিং, অর্থাৎ এরা বিশাল পরিসরের ক্যারেক্টার উপস্থাপন করতে পারে, যার মধ্যে আছে:
UTF-8 আর UTF-16 দুটোই ভ্যারিয়েবল লেংথ এনকোডিং, অর্থাৎ ভিন্ন ভিন্ন ক্যারেক্টার ভিন্ন পরিমাণ জায়গা নেয়।
'a' অক্ষরটি আর '😛' ইমোজিটি বিবেচনা করুন। UTF-16-তে অক্ষরটি ২ বাইট নেয়, কিন্তু ইমোজিটি নেয় ৪ বাইট।
এই অনুশীলনীর আসল কৌশল হলো, ইউনিকোড কোড ইউনিটের বদলে ইউনিকোড ক্যারেক্টার (কোডপয়েন্ট) ঘিরে তৈরি করা API ব্যবহার করা।
একটি "সাধারণ" UTF-16 এনকোডেড স্ট্রিংকে এক ধারাবাহিক ক্যারেক্টার হিসেবে প্রকাশ করা যায়, যেখানে প্রতিটি ক্যারেক্টার সর্বোচ্চ ১৬ বিট লম্বা হতে পারে (তাই এর নাম UTF-16)। এর মানে হলো, সর্বোচ্চ 2¹⁶ (দুই-এর ষোল ঘাত), অর্থাৎ ৬৫৫৩৬টি সম্ভাব্য ক্যারেক্টার, যা ১৬ বিটে বা এক কোড ইউনিট-এ প্রকাশ করা যায়। এই ৬৫৫৩৬টি ক্যারেক্টার মিলেই যা গঠন করে সেটাই বেসিক মাল্টিলিঙ্গুয়াল সেট, যা বেশিরভাগ ভাষার সবচেয়ে কমন ক্যারেক্টারগুলোর জন্য যথেষ্ট বড়।
তবে কিছু সিম্বল মাত্র এক কোড ইউনিটে আঁটে না। এর সমাধান হলো, এগুলোকে দুইটি কোড ইউনিট দিয়ে প্রকাশ করা। এই দুইটি UTF-16 কোড ইউনিট, যাদের অনেক সময় সারোগেট পেয়ার-ও বলা হয়, মিলে একটি কোড পয়েন্ট তৈরি করে।
সুতরাং, সংক্ষেপে, UTF-16 এনকোডিংয়ের কথা বললে:
code unit হলো ১৬ (বা তার কম) বিট, যা একটি ক্যারেক্টার প্রকাশ করে।code point হলো এক বা দুইটি কোড ইউনিট, যা একটি ক্যারেক্টার প্রকাশ করে।আরও বিভ্রান্তি বাড়াতে আছে গ্রাফিম ক্লাস্টার, যা মূলত ইউনিকোড ক্যারেক্টারের (কোড পয়েন্টের) এমন এক ধারা, যাদের একটি দৃশ্যমান একক হিসেবে ধরা উচিত। যেমন কিছু ইমোজি, যেমন এই একটি 👨👦।
বেশিরভাগ বিল্ট-ইন Javascript মেথড UTF-16 এনকোডেড স্ট্রিং নিয়েই কাজ করে, তবে তারা কাজ করে UTF-16 কোড ইউনিটের ভিত্তিতে।
যেমন, একটি String.prototype.split("") মেথড একটি স্ট্রিংকে কোড ইউনিট অনুযায়ী আলাদা করে।
অন্যদিকে, String iterators কোড পয়েন্ট অনুযায়ী ইটারেট করে।
ইউনিকোড স্ট্রিং নিয়ে আরও অনেক কিছু পড়তে ও উদাহরণ পেতে পারেন MDN-এ।
Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।