কেন আমাদের ইউনিকোড দরকার?
(খুব বেশি নয়) প্রথম দিনগুলিতে যা ছিল তা ছিল এসএসআইআই। এটি ঠিক ছিল, যেহেতু যে সমস্ত দরকার হবে তা এই বাক্যটির মতো কয়েকটি নিয়ন্ত্রণ অক্ষর, বিরামচিহ্ন, সংখ্যা এবং অক্ষর। দুর্ভাগ্যক্রমে, আজকের বৈশ্বিক আন্তঃযোগাযোগ এবং সামাজিক মিডিয়াগুলির আজব পৃথিবীটি আগে থেকেই ধারণা করা হয়নি এবং একই নথিতে ইংরাজী, العربية, 汉语, עִבְרִית, ελληνικά, see এবং see দেখা খুব অস্বাভাবিক কিছু নয় (আমি আশা করি আমি কোনও পুরানো ভাঙ্গেনি) ব্রাউজার)।
তবে যুক্তির স্বার্থে, বলি জো অ্যাভারেজ একটি সফ্টওয়্যার বিকাশকারী। তিনি জোর দিয়েছিলেন যে তাঁর কেবল কখনও ইংরেজী প্রয়োজন হবে এবং যেমনটি কেবল এএসসিআইআই ব্যবহার করতে চায়। এটি জো ব্যবহারকারীর পক্ষে ভাল হতে পারে তবে সফটওয়্যার বিকাশকারী জোয়ের পক্ষে এটি ঠিক নয় । প্রায় অর্ধেক বিশ্ব অ-লাতিন অক্ষর ব্যবহার করে এবং এএসসিআইআই ব্যবহার করে তর্কাতীতভাবে এই লোকগুলির কাছে অনিচ্ছাকৃত, এবং সর্বোপরি, তিনি তার সফ্টওয়্যারটি একটি বৃহত এবং বর্ধমান অর্থনীতির বন্ধ করে দিচ্ছেন।
সুতরাং, সমস্ত ভাষা সহ একটি পরিবেষ্টিত অক্ষর সেট প্রয়োজন needed এভাবে ইউনিকোড এসেছিল। এটি প্রতিটি অক্ষরকে একটি কোড পয়েন্ট বলে একটি অনন্য নম্বর বরাদ্দ করে । অন্যান্য সম্ভাব্য সেটগুলির তুলনায় ইউনিকোডের একটি সুবিধা হ'ল প্রথম 256 কোড পয়েন্টগুলি আইএসও -8859-1 এর মতো এবং তাই এটি ASCII। এছাড়াও, বেসিক বহুভাষিক প্লেন (বিএমপি) নামে পরিচিত একটি অঞ্চলে সাধারণত ব্যবহৃত অক্ষরের বিস্তৃত অংশ কেবল দুটি বাইট দ্বারা উপস্থাপিত হয় । এই অক্ষর সেটটি অ্যাক্সেস করার জন্য এখন একটি অক্ষর এনকোডিং প্রয়োজন, এবং প্রশ্নটি জিজ্ঞাসা করার সাথে সাথে আমি ইউটিএফ -8 এবং ইউটিএফ -16 তে মনোনিবেশ করব।
স্মৃতি বিবেচনা
তাহলে এই এনকোডিংগুলিতে কয়টি বাইট অ্যাক্সেস দেয়?
- হল UTF-8:
- 1 বাইট: স্ট্যান্ডার্ড এএসসিআইআই
- 2 বাইট: আরবি, হিব্রু, বেশিরভাগ ইউরোপীয় স্ক্রিপ্ট (উল্লেখযোগ্যভাবে জর্জিয়ান বাদে )
- 3 বাইট: বিএমপি
- 4 বাইট: সমস্ত ইউনিকোড অক্ষর
- হল UTF-16:
- 2 বাইট: বিএমপি
- 4 বাইট: সমস্ত ইউনিকোড অক্ষর
এটি এখন উল্লেখ করার মতো যে বিএমপিতে নেই এমন চরিত্রগুলির মধ্যে রয়েছে প্রাচীন স্ক্রিপ্টস, গাণিতিক প্রতীক, সংগীত প্রতীক এবং বিরল চীনা / জাপানি / কোরিয়ান (সিজেকে) অক্ষর।
আপনি যদি বেশিরভাগ এএসসিআইআই অক্ষরগুলির সাথে কাজ করছেন তবে ইউটিএফ -8 অবশ্যই আরও মেমরি দক্ষ। তবে, আপনি যদি বেশিরভাগ অ-ইউরোপীয় স্ক্রিপ্টগুলির সাথে কাজ করে থাকেন তবে ইউটিএফ -8 ব্যবহার করা ইউটিএফ -16 এর চেয়ে 1.5 গুণ কম মেমরির দক্ষ হতে পারে। বৃহত পরিমাণে পাঠ্য, যেমন বড় ওয়েব পৃষ্ঠাগুলি বা লম্বা শব্দের নথির সাথে লেনদেন করার সময় এটি পারফরম্যান্সকে প্রভাবিত করতে পারে।
এনকোডিং বেসিক
দ্রষ্টব্য: আপনি যদি ইউটিএফ -8 এবং ইউটিএফ -16 কীভাবে এনকোডড করে থাকেন তা জানেন, ব্যবহারিক অ্যাপ্লিকেশনগুলির জন্য পরবর্তী বিভাগে যান।
- UTF-8: স্ট্যান্ডার্ড ASCII (0-127) অক্ষরের জন্য, UTF-8 কোডগুলি অভিন্ন। এটি ইউটিএফ -8 আদর্শ করে তোলে যদি বিদ্যমান ASCII পাঠ্যের সাথে পিছনের দিকে সামঞ্জস্যতা প্রয়োজন হয়। অন্যান্য অক্ষরের জন্য 2-4 বাইট থেকে যে কোনও জায়গায় প্রয়োজন। এটি একটি বহু-বাইট চরিত্রের অংশ কিনা তা বোঝানোর জন্য এই প্রতিটি বাইটে কিছু বিট সংরক্ষণ করে এটি করা হয়। বিশেষত, প্রতিটি বাইটের প্রথম বিটটি
1
ASCII অক্ষরগুলির সাথে সংঘাত এড়ানো।
- ইউটিএফ -16: বৈধ বিএমপি অক্ষরের জন্য, ইউটিএফ -16 প্রতিনিধিত্ব কেবল তার কোড পয়েন্ট। তবে, বিএমপিবিহীন অক্ষরের জন্য ইউটিএফ -১ 16 সার্গেট জুটি প্রবর্তন করে । এক্ষেত্রে দুটি বি-বাইট অংশের মানচিত্রটি একটি নন-বিএমপি অক্ষরকে মিশ্রণ করে। এই দ্বি-বাইট অংশগুলি বিএমপি সংখ্যার পরিসীমা থেকে আসে তবে ইউনিকোড স্ট্যান্ডার্ড দ্বারা বিএমপি অক্ষর হিসাবে অবৈধ হওয়ার নিশ্চয়তা দেয়। এছাড়াও, যেহেতু ইউটিএফ -16 এর প্রাথমিক একক হিসাবে দুটি বাইট রয়েছে, তাই এটি আধ্যাত্মিকতা দ্বারা প্রভাবিত হয় । ক্ষতিপূরণ দেওয়ার জন্য, কোনও স্ট্রিমের শুরুতে একটি সংরক্ষিত বাইট অর্ডার চিহ্ন স্থাপন করা যেতে পারে যা শেষের দিক নির্দেশ করে। সুতরাং, আপনি যদি ইউটিএফ -16 ইনপুটটি পড়ছেন এবং কোনও অন্তর্নিহিততা নির্দিষ্ট করা হয়নি, আপনাকে অবশ্যই এটি পরীক্ষা করে দেখতে হবে।
যেমন দেখা যায়, ইউটিএফ -8 এবং ইউটিএফ -16 একে অপরের সাথে সামঞ্জস্যপূর্ণ কোথাও নেই। সুতরাং আপনি যদি I / O করছেন, আপনি কোন এনকোডিংটি ব্যবহার করছেন তা নিশ্চিত হয়ে গেছেন তা নিশ্চিত করুন! এই এনকোডিংগুলির বিষয়ে আরও তথ্যের জন্য, দয়া করে ইউটিএফএফএকিউ দেখুন ।
ব্যবহারিক প্রোগ্রামিং বিবেচনা
চরিত্র এবং স্ট্রিং ডেটা প্রকার: এগুলি প্রোগ্রামিং ভাষায় কীভাবে এনকোড হয়? যদি সেগুলি কাঁচা বাইট হয়, আপনি যে-মিনিটের পরে অ-এসসিআইআই অক্ষরগুলি আউটপুট দেওয়ার চেষ্টা করবেন, আপনি কয়েকটি সমস্যার মধ্যে পড়তে পারেন। এছাড়াও, এমনকি যদি চরিত্রের ধরনটি কোনও ইউটিএফ-এর উপর ভিত্তি করে থাকে, তার মানে এই নয় যে স্ট্রিংগুলি যথাযথ ইউটিএফ। তারা অবৈধ যে বাইট অনুক্রমের অনুমতি দিতে পারে। সাধারণত, আপনাকে এমন একটি গ্রন্থাগার ব্যবহার করতে হবে যা ইউটিএফ সমর্থন করে, যেমন আই সি ইউ , সি ++ এবং জাভা হিসাবে। যে কোনও ক্ষেত্রে, আপনি যদি ডিফল্ট এনকোডিং ছাড়া অন্য কোনও ইনপুট / আউটপুট দিতে চান তবে আপনাকে প্রথমে এটি রূপান্তর করতে হবে।
প্রস্তাবিত / ডিফল্ট / প্রভাবশালী এনকোডিংগুলি: যখন কোন ইউটিএফ ব্যবহার করতে হয় তার কোনও পছন্দ দেওয়া হলে, আপনি যে পরিবেশে কাজ করছেন তার জন্য প্রস্তাবিত মানগুলি অনুসরণ করা ভাল example উদাহরণস্বরূপ, ইউটিএফ -8 ওয়েবে প্রভাবশালী এবং HTML5 থেকে এটি এটি হয়েছে প্রস্তাবিত এনকোডিং । বিপরীতভাবে, .NET এবং জাভা উভয় পরিবেশই একটি ইউটিএফ -16 অক্ষর টাইপের ভিত্তিতে প্রতিষ্ঠিত। বিভ্রান্তিকরভাবে (এবং ভুলভাবে) উল্লেখগুলি প্রায়শই "ইউনিকোড এনকোডিং" -কে করা হয়, যা সাধারণত প্রদত্ত পরিবেশে প্রভাবশালী ইউটিএফ এনকোডিংকে বোঝায়।
লাইব্রেরি সহায়তা: আপনি যে লাইব্রেরিগুলি ব্যবহার করছেন সেটি কোনও ধরণের এনকোডিং সমর্থন করে। কোনটি? তারা কোনা ক্ষেত্রে সমর্থন করে? প্রয়োজনীয়তা যেহেতু আবিষ্কারের জননী, তাই ইউটিএফ -8 গ্রন্থাগারগুলি সাধারণত 1, 2 এবং 4 বাইট অক্ষরগুলি যথাযথভাবে 4-বাইট অক্ষর সমর্থন করবে। যাইহোক, সমস্ত পরিকল্পনাযুক্ত ইউটিএফ -16 লাইব্রেরিগুলি সার্োগেট জোড়গুলি সঠিকভাবে সমর্থন করে না কারণ সেগুলি খুব কমই ঘটে।
অক্ষর গণনা: ইউনিকোডে অক্ষরের সংমিশ্রণ রয়েছে । উদাহরণস্বরূপ কোড পয়েন্ট U + 006E (n), এবং ইউ + 0303 (একটি সংমিশ্রণ টিলড) গঠন করে but তবে কোড পয়েন্ট U + 00F1 ফর্ম ñ ñ তাদের দেখতে অভিন্ন দেখতে হবে, তবে একটি সাধারণ গণনা অ্যালগরিদম প্রথম উদাহরণের জন্য 2, পরবর্তীগুলির জন্য 1 প্রদান করবে। এটি অগত্যা ভুল নয়, তবে পছন্দসই ফলাফলও নাও হতে পারে।
সমতার জন্য তুলনা: এ, А, এবং the একই চেহারা তবে তারা যথাক্রমে লাতিন, সিরিলিক এবং গ্রীক। আপনার সি এবং Ⅽ এর মতো কেসও রয়েছে, একটি হ'ল একটি চিঠি, অন্যটি রোমান সংখ্যার। তদতিরিক্ত, আমাদের পাশাপাশি সম্মিলিত অক্ষর রয়েছে। আরও তথ্যের জন্য ইউনিকোডে সদৃশ অক্ষরগুলি দেখুন ।
সারোগেট জোড়: এগুলি প্রায়শই যথেষ্ট হয় তাই আমি কেবল কয়েকটি উদাহরণ লিঙ্ক সরবরাহ করব:
অন্যান্য?: