ইউনিকোড এবং এনকোডিংগুলি সম্পূর্ণ ভিন্ন, সম্পর্কিত নয়।
ইউনিকোড
প্রতিটি চরিত্রের জন্য একটি সংখ্যার আইডি নির্ধারণ করে:
- 0x41 → এ
- 0xE1 → á
- 0x414 → Д
সুতরাং, ইউনিকোড 0x41 নম্বর A, 0xE1 থেকে á, এবং 0x414 থেকে Д নির্ধারণ করে s
এমনকি আমি যে ছোট তীরটি ব্যবহার করেছি used এর ইউনিকোড নম্বর রয়েছে, এটি 0x2192। এমনকি ইমোজিদেরও ইউনিকোড নম্বর রয়েছে, x 0x1F602।
আপনি এই টেবিলের সমস্ত অক্ষরের ইউনিকোড নম্বরগুলি দেখতে পারেন । বিশেষ করে, আপনি উপরের প্রথম তিনটি অক্ষর জানতে পারেন এখানে তীর এখানে , এবং ইমোজি এখানে ।
ইউনিকোড দ্বারা চিহ্নিত সমস্ত অক্ষরকে নির্ধারিত এই সংখ্যাগুলিকে কোড পয়েন্ট বলা হয় ।
এই সমস্তটির উদ্দেশ্য হ'ল প্রতিটি চরিত্রকে নির্বিঘ্নে উল্লেখ করার জন্য একটি উপায় সরবরাহ করা। উদাহরণস্বরূপ, যদি আমি about সম্পর্কে কথা বলি, "আপনি জানেন, অশ্রু সহকারে এই হাসির ইমোজি" বলার পরিবর্তে , আমি কেবল বলতে পারি, ইউনিকোড কোড পয়েন্ট 0x1F602 । সহজ, তাই না?
নোট করুন যে ইউনিকোড কোড পয়েন্টগুলি সাধারণত একটি শীর্ষস্থানীয় দিয়ে ফর্ম্যাট করা হয় U+
, তারপরে হেক্সাডেসিমাল সংখ্যাসূচক মানটি কমপক্ষে 4 ডিজিটে প্যাড করা হবে। সুতরাং, উপরোক্ত উদাহরণগুলি হবে U + 0041, U + 00E1, U + 0414, U + 2192, U + 1F602।
ইউনিকোড কোড পয়েন্টগুলি ইউ +0000 থেকে ইউ + 10 এফএফএফ পর্যন্ত রয়েছে। এটি 1,114,112 সংখ্যা। এই সংখ্যার 2048 জন্য ব্যবহার করা হয় surrogates , এইভাবে, সেখানে 1.112.064 থাকা। এর অর্থ, ইউনিকোড 1,112,064 স্বতন্ত্র অক্ষরগুলিকে একটি অনন্য আইডি (কোড পয়েন্ট) নির্ধারণ করতে পারে। এই সমস্ত কোড পয়েন্ট এখনও কোনও চরিত্রের জন্য বরাদ্দ করা হয় নি, এবং ইউনিকোড অবিচ্ছিন্নভাবে প্রসারিত হয় (উদাহরণস্বরূপ, যখন নতুন ইমোজিগুলি প্রবর্তন করা হয়)।
গুরুত্বপূর্ণ বিষয়টি মনে রাখতে হবে যে সমস্ত ইউনিকোড যা করে তা হ'ল সহজ এবং দ্ব্যর্থহীন রেফারেন্সের জন্য প্রতিটি অক্ষরকে কোড পয়েন্ট নামে একটি সংখ্যাসূচক আইডি প্রদান করা।
এনকোডিংস
বিট নিদর্শনগুলিতে মানচিত্রের অক্ষর।
এই বিট নিদর্শনগুলি কম্পিউটারের মেমোরিতে বা ডিস্কে অক্ষরগুলি উপস্থাপন করতে ব্যবহৃত হয়।
অনেকগুলি পৃথক এনকোডিং রয়েছে যা অক্ষরের বিভিন্ন উপগ্রহকে কভার করে। ইংরাজী-ভাষী বিশ্বে সর্বাধিক সাধারণ এনকোডিংগুলি নিম্নলিখিত:
দৈর্ঘ্যের 7 এর বিট নিদর্শনগুলিতে মানচিত্র 128 টি অক্ষর (কোড পয়েন্ট U + 0000 থেকে U + 007F)
উদাহরণ:
আপনি এই টেবিলের সমস্ত ম্যাপিং দেখতে পাবেন ।
দৈর্ঘ্য 8 এর বিট নিদর্শনগুলিতে মানচিত্র 191 টি অক্ষর (কোড পয়েন্ট U + 0020 থেকে U + 007E এবং U + 00A0 থেকে U + 00FF পর্যন্ত)।
উদাহরণ:
- a → 01100001 (0x61)
- → 11100001 (0xE1)
আপনি এই টেবিলের সমস্ত ম্যাপিং দেখতে পাবেন ।
দৈর্ঘ্য 8, 16, 24, বা 32 বিট (যা, 1, 2, 3, বা 4 বাইট) এর বিট নিদর্শনগুলিতে মানচিত্র 1,112,064 টি অক্ষর (সমস্ত বিদ্যমান ইউনিকোড কোড পয়েন্ট) bit
উদাহরণ:
- a → 01100001 (0x61)
- → 00 11000011 10100001 (0xC3 0xA1)
- → 1 11100010 10001001 10100000 (0xE2 0x89 0xA0)
- → 11 11110000 10011111 10011000 10000010 (0xF0 0x9F 0x98 0x82)
বিটি স্ট্রিংগুলিতে ইউটিএফ -8 অক্ষরগুলিকে এনকোড করার উপায়টি এখানে খুব ভালভাবে বর্ণিত ।
ইউনিকোড এবং এনকোডিংস
উপরের উদাহরণগুলির দিকে তাকালে এটি স্পষ্ট হয়ে যায় যে কীভাবে ইউনিকোড কার্যকর।
উদাহরণস্বরূপ, যদি আমি ল্যাটিন -1 এবং আমি আমার enc এর এনকোডিংটি ব্যাখ্যা করতে চাই, তবে আমাকে বলার দরকার নেই:
"আমি একটি আইগু দিয়ে একটি এনকোড করেছি (বা তবে আপনি সেই উত্থাপিত বারটিকে কল করেন) 11100001 হিসাবে"
তবে আমি কেবল বলতে পারি:
"আমি ইউ + 00E1 কে 11100001 হিসাবে এনকোড করেছি"
এবং আমি যদি ইউটিএফ -8 , আমি বলতে পারি:
"আমি, পরিবর্তে, আমি ইউ + 00E1 11000011 10100001 হিসাবে এনকোড করব"
এবং এটি প্রত্যেকের কাছে নির্বিঘে স্পষ্ট যে আমরা কোন চরিত্রটি বোঝাতে চাইছি।
এখন প্রায়শই উদ্ভূত বিভ্রান্তির দিকে
এটি সত্য যে কখনও কখনও কোনও এনকোডিংয়ের বিট প্যাটার্ন, আপনি যদি এটি বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করেন তবে এই অক্ষরের ইউনিকোড কোড পয়েন্টের মতোই।
উদাহরণ স্বরূপ:
- হওয়া ASCII এনকোড একটি 1100001, যা আপনি হেক্সাডেসিমেল সংখ্যাকে হিসাবে ব্যাখ্যা করতে 0x61 , এবং ইউনিকোড কোড বিন্দু একটি হল ইউ + + 0061 ।
- ল্যাটিন -1 এনকোড একটি 11100001, যা আপনি যেমন হেক্সাডেসিমেল সংখ্যাকে ব্যাখ্যা করা যেতে পারে 0xE1 , এবং ইউনিকোড কোড বিন্দু á হয় U + এ 00E1 ।
অবশ্যই, সুবিধার্থে এই উদ্দেশ্যে এটি সাজানো হয়েছে। তবে আপনার এটিকে খাঁটি কাকতালীয় হিসাবে দেখা উচিত । স্মৃতিতে কোনও অক্ষরকে উপস্থাপন করতে ব্যবহৃত বিট প্যাটার্নটি কোনওভাবেই এই অক্ষরের ইউনিকোড কোড পয়েন্টের সাথে আবদ্ধ নয়।
কেউ এমনকি এমনও বলে না যে আপনাকে 11100001 এর মতো কিছুটা স্ট্রিং বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করতে হবে। শুধু বিট যে ল্যাটিন -1 ব্যবহারসমূহ চরিত্র সঙ্কেতাক্ষরে লিখা ক্রম হিসাবে এটি তাকান á ।
আপনার প্রশ্ন ফিরে
আপনার পাইথন দোভাষী দ্বারা ব্যবহৃত এনকোডিংটি ইউটিএফ -8 ।
আপনার উদাহরণগুলিতে যা চলছে তা এখানে:
উদাহরণ 1
নিম্নলিখিতটি ইউটিএফ -8-তে অক্ষরটি এনকোড করে। এই বিট স্ট্রিং 11000011 10100001 এর ফলস্বরূপ, যা ভেরিয়েবলে সংরক্ষণ করা হয় a
।
>>> a = 'á'
আপনি যখন এর মানটি a
দেখেন, এর সামগ্রী 11000011 10100001 হেক্স নম্বর 0xC3 0xA1 এবং আউটপুট হিসাবে ফর্ম্যাট হবে '\xc3\xa1'
:
>>> a
'\xc3\xa1'
উদাহরণ 2
নিম্নলিখিতটি ভেরিয়েবলের ইউনিকোড কোড পয়েন্ট á এর U + 00E1 সংরক্ষণ করে ua
(আমরা জানি না যে পাইথন কোন ডেটা ফর্ম্যাটটি অভ্যন্তরীণভাবে কোড পয়েন্ট U + 00E1 মেমরির প্রতিনিধিত্ব করতে ব্যবহার করে এবং এটি আমাদের কাছে গুরুত্বহীন):
>>> ua = u'á'
আপনি যখন এর মানটি দেখেন ua
, পাইথন আপনাকে বলে যে এটিতে ইউ + 00E1 কোড পয়েন্ট রয়েছে:
>>> ua
u'\xe1'
উদাহরণ 3
ইউটিএফ -8 এর সাথে নিম্নলিখিত এনকোডগুলি ইউনিকোড কোড পয়েন্ট U + 00E1 (চরিত্র represent উপস্থাপন করে) যা বিট প্যাটার্নের ফলস্বরূপ 11000011 10100001। আবার আউটপুট জন্য এই বিট প্যাটার্নটি হেক্স নম্বর 0xC3 0xA1 হিসাবে উপস্থাপিত হয়:
>>> ua.encode('utf-8')
'\xc3\xa1'
উদাহরণ 4
নিম্নলিখিত এনকোড ইউনিকোড কোড বিন্দু ল্যাটিন -1, যা বিট প্যাটার্ন 11100001. আউটপুট মধ্যে ফলাফল, এই বিট প্যাটার্ন হিসাবে হেক্স সংখ্যা 0xE1, যা প্রতিনিধিত্ব করা হয় সঙ্গে U + এ 00E1 (প্রতিনিধিত্বমূলক চরিত্র ক) কাকতালীয় প্রাথমিক হিসাবে একই কোড পয়েন্ট U + 00E1:
>>> ua.encode('latin1')
'\xe1'
ইউনিকোড অবজেক্ট ua
এবং লাতিন -১ এনকোডিংয়ের মধ্যে কোনও সম্পর্ক নেই । যে á এর কোড পয়েন্টটি ইউ + 00E1 এবং Latin এর ল্যাটিন -1 এনকোডিং 0xE1 হয় (যদি আপনি বাইনারি সংখ্যা হিসাবে এনকোডিংয়ের বিট প্যাটার্নটি ব্যাখ্যা করেন) তবে এটি খাঁটি কাকতালীয় ঘটনা।
unicode
এটা শুধু ইউনিকোড চরিত্রের বিমূর্ততা আছে,; কিছু এনকোডিং (যেমন ) দিয়েunicode
রূপান্তর করা যায় ।str
utf-8