ঠিক আছে, নেট এবং সি # তে সমস্ত স্ট্রিং ইউটিএফ -16 এলই হিসাবে এনকোড করা আছে । ক string
অক্ষরের ক্রম হিসাবে সংরক্ষণ করা হয়। প্রতিটিতে char
2 বাইট বা 16 বিটের স্টোরেজ encapsulates।
আমরা "কাগজ বা স্ক্রিনে" একটি একক বর্ণ, চরিত্র, গ্লাইফ, প্রতীক বা বিরাম চিহ্ন হিসাবে যা দেখি তা একক পাঠ্য উপাদান হিসাবে ভাবা যেতে পারে। ইউনিকোড স্ট্যান্ডার্ড সংযুক্তি # 29 ইউনিকোড পাঠ্য বিভাগে বর্ণিত হিসাবে প্রতিটি পাঠ্য উপাদানটি এক বা একাধিক কোড পয়েন্ট দ্বারা প্রতিনিধিত্ব করা হয়। কোডগুলির একটি বিস্তৃত তালিকা এখানে পাওয়া যাবে ।
প্রতিটি কোড পয়েন্ট কম্পিউটার দ্বারা অভ্যন্তরীণ উপস্থাপনের জন্য বাইনারি মধ্যে এনকোড করা প্রয়োজন। হিসাবে বলা হয়েছে, প্রতিটি char
স্টোর 2 বাইট। নীচে বা নীচের কোড পয়েন্টগুলি U+FFFF
একটি একক মধ্যে সংরক্ষণ করা যেতে পারে char
। উপরের কোড পয়েন্টগুলি U+FFFF
একটি একক কোড পয়েন্ট উপস্থাপন করতে দুটি অক্ষর ব্যবহার করে একটি সারোগেট জুটি হিসাবে সংরক্ষণ করা হয়।
আমরা এখন যা অনুমান করতে পারি তার ভিত্তিতে, একটি পাঠ্য উপাদান char
দুটি হিসাবে অক্ষরের একটি সারোগেট জুটি হিসাবে বা একাধিক কোড পয়েন্ট দ্বারা একক অক্ষর এবং সারোগেট পেয়ারগুলির কিছু সংমিশ্রণ দ্বারা উপস্থাপিত হলে একটি পাঠ্য উপাদান সংরক্ষণ করা যেতে পারে । যদি এটি যথেষ্ট জটিল না হয় তবে কিছু পাঠ্য উপাদানসমূহ ইউনিকোড স্ট্যান্ডার্ড সংযুক্তি # 15, ইউনিকোড সাধারণকরণ ফর্মসমূহে বর্ণিত কোড পয়েন্টগুলির বিভিন্ন সংমিশ্রণ দ্বারা প্রতিনিধিত্ব করা যেতে পারে ।
গর্ভনাটিকা
সুতরাং, যখন রেন্ডারটি একই রকম দেখায় সেই স্ট্রিংগুলি আসলে বিভিন্ন বর্ণের মিশ্রণ দিয়ে তৈরি করা যায়। এই জাতীয় দুটি স্ট্রিংয়ের একটি অর্ডিনাল (বাইট বাই) তুলনা একটি পার্থক্য সনাক্ত করতে পারে, এটি অপ্রত্যাশিত বা অনাকাঙ্ক্ষিত হতে পারে।
আপনি পুনরায় এনকোড করতে পারেন। নেট স্ট্রিং। যাতে তারা একই নরমালাইজেশন ফর্মটি ব্যবহার করে। একবার সাধারন হয়ে গেলে একই পাঠ্য উপাদানগুলির সাথে দুটি স্ট্রিং একইভাবে এনকোড করা হবে। এটি করার জন্য, স্ট্রিংটি ব্যবহার করুন function সাধারণ ফাংশন। তবে মনে রাখবেন, কিছু আলাদা পাঠ্য উপাদানগুলি একে অপরের সাথে সাদৃশ্যপূর্ণ। : -s
সুতরাং, এই সব প্রশ্নের সাথে সম্পর্কিত মানে? পাঠ্য এলিমেন্টটি '𠈓'
একক কোড পয়েন্ট ইউ + 20213 সিজেকে ইউনিফাইড আইডোগ্রাফগুলি এক্সটেনশান দ্বারা প্রতিনিধিত্ব করেছে খ । এর অর্থ এটি একটি একক হিসাবে এনকোড করা যাবে না char
এবং দুটি চর ব্যবহার করে অবশ্যই সুরোগেট পেয়ার হিসাবে এনকোড করা উচিত। এই কারণেই string b
আর এক char
দীর্ঘ string a
।
আপনার যদি নির্ভরযোগ্যভাবে (সতর্কতা string
অবলম্বন করতে হয় ) পাঠ্যের উপাদানগুলির সংখ্যা গণনা করতে হয় তবে আপনার System.Globalization.StringInfo
ক্লাসটি এই জাতীয়ভাবে ব্যবহার করা উচিত
।
using System.Globalization;
string a = "abc";
string b = "A𠈓C";
Console.WriteLine("Length a = {0}", new StringInfo(a).LengthInTextElements);
Console.WriteLine("Length b = {0}", new StringInfo(b).LengthInTextElements);
আউটপুট প্রদান,
"Length a = 3"
"Length b = 3"
প্রত্যাশিত.
বিচারকার্য স্থগিত রাখার আদেশ
StringInfo
এবং TextElementEnumerator
ক্লাসে ইউনিকোড পাঠ্য বিভাগের নেট প্রয়োগকরণটি সাধারণত কার্যকর হওয়া উচিত এবং বেশিরভাগ ক্ষেত্রেই কলার প্রত্যাশা করে এমন একটি প্রতিক্রিয়া পাবেন। তবে, ইউনিকোড স্ট্যান্ডার্ড এনেেক্স # 29- এ যেমন বলা হয়েছে , "ব্যবহারকারীর উপলব্ধিগুলির মিলের লক্ষ্যটি সর্বদা ঠিক পূরণ করা যায় না কারণ কেবল পাঠ্যটিতে সর্বদা সীমানা নির্ধারণের জন্য পর্যাপ্ত তথ্য থাকে না।"