ট্র্যাক
/
JavaScript
JavaScript
/
অনুশীলনী
/
মাইক্রো ব্লগ
মাইক্রো ব্লগ

মাইক্রো ব্লগ

সহজ

নির্দেশনা

আপনি সোশ্যাল মিডিয়ার বাজারে খুব খুব ছোট পোস্টের একটি ফাঁক খুঁজে পেয়েছেন। এখন Twitter ২৮০ ক্যারেক্টারের পোস্টের অনুমতি দেওয়ায়, দ্রুত সোশ্যাল মিডিয়া আপডেট চাওয়া মানুষদের চাহিদা পূরণ হচ্ছে না। আপনি নিজের একটি সোশ্যাল মিডিয়া নেটওয়ার্ক বানানোর সিদ্ধান্ত নিলেন।

আপনার প্রোডাক্টকে উল্লেখযোগ্য করে তুলতে আপনি এটিকে চরম পর্যায়ে নিয়ে যান এবং কেবল ৫টি বা তার কম ক্যারেক্টারের পোস্টের অনুমতি দেন। ৫ ক্যারেক্টারের বেশি যেকোনো পোস্ট ৫ ক্যারেক্টারে ছেঁটে দেওয়া উচিত।

আপনার ইউজাররা যাতে নিজেদের পূর্ণভাবে প্রকাশ করতে পারে, সেজন্য আপনি ইমোজি আর অন্যান্য ইউনিকোডের অনুমতি দেন।

কাজটি হলো ইনপুট স্ট্রিংগুলোকে ৫ ক্যারেক্টারে ছেঁটে দেওয়া।

টেক্সট এনকোডিং

ডিজিটালভাবে সংরক্ষিত টেক্সটকে বাইটের একটি ধারায় রূপান্তর করতে হয়। ক্যারেক্টারকে বাইটে ম্যাপ করার তিনটি প্রচলিত উপায় আছে।

  • ASCII ইংরেজি ভাষার ক্যারেক্টার এনকোড করতে পারে। প্রতিটি ক্যারেক্টার ঠিক ১ বাইট লম্বা।
  • UTF-8 একটি ইউনিকোড টেক্সট এনকোডিং। ক্যারেক্টারগুলো ১ থেকে ৪ বাইট নেয়।
  • UTF-16 একটি ইউনিকোড টেক্সট এনকোডಿಂহ। ক্যারেক্টারগুলো ২ বা ৪ বাইট লম্বা।

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

বেশিরভাগ বিল্ট-ইন Javascript মেথড UTF-16 এনকোডেড স্ট্রিং নিয়েই কাজ করে, তবে তারা কাজ করে UTF-16 কোড ইউনিটের ভিত্তিতে। যেমন, একটি String.prototype.split("") মেথড একটি স্ট্রিংকে কোড ইউনিট অনুযায়ী আলাদা করে।

অন্যদিকে, String iterators কোড পয়েন্ট অনুযায়ী ইটারেট করে।

ইউনিকোড স্ট্রিং নিয়ে আরও অনেক কিছু পড়তে ও উদাহরণ পেতে পারেন MDN-এ।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
JavaScript Exercism

মাইক্রো ব্লগ শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।