পাইথন স্ট্রেড বনাম ইউনিকোড প্রকারের


104

পাইথন ২.7 এর সাথে কাজ করে আমি ভাবছি যে এর unicodeপরিবর্তে প্রকারটি ব্যবহারের ক্ষেত্রে কী আসল সুবিধা রয়েছে str, কারণ তারা উভয়ই ইউনিকোড স্ট্রিং ধরে রাখতে সক্ষম বলে মনে হচ্ছে। সেখানে পৃথক্ মধ্যে ইউনিকোড কোড সেট করতে সক্ষম নয় হওয়া থেকে কোনো বিশেষ কারণ আছে unicodeপালাবার গৃহস্থালির কাজ ব্যবহার স্ট্রিং \:

এর সাথে একটি মডিউল কার্যকর করা হচ্ছে:

# -*- coding: utf-8 -*-

a = 'á'
ua = u'á'
print a, ua

ফলাফলগুলি: á, á

সম্পাদনা:

পাইথন শেল ব্যবহার করে আরও পরীক্ষা করা:

>>> a = 'á'
>>> a
'\xc3\xa1'
>>> ua = u'á'
>>> ua
u'\xe1'
>>> ua.encode('utf8')
'\xc3\xa1'
>>> ua.encode('latin1')
'\xe1'
>>> ua
u'\xe1'

সুতরাং, এর পরিবর্তে unicodeস্ট্রিংটি এনকোড হয়েছে বলে মনে latin1হচ্ছে utf-8এবং কাঁচা স্ট্রিংটি ব্যবহার করে এনকোড করা হয়েছে utf-8? আমি এখন আরও বিভ্রান্ত! : এস


কোন আছে এনকোডিং জন্য unicodeএটা শুধু ইউনিকোড চরিত্রের বিমূর্ততা আছে,; কিছু এনকোডিং (যেমন ) দিয়ে unicodeরূপান্তর করা যায় । strutf-8
বিন

শেলের ডিফল্ট এনকোডিং হ'ল latin1(যা আপনি নিজের শেল সেটিংসে পরিবর্তন করতে পারেন)। আপনার মডিউলে আপনি আপনার দোভাষী এবং সংকলককে বলছেন যে সমস্ত এনকোডিং utf-8। সুতরাং আউটপুট মধ্যে পার্থক্য
এহতেশাম সিদ্দিকী

উত্তর:


179

unicodeপাঠ্য হ্যান্ডেল বোঝানো হয় । পাঠ্য কোড কোডের ক্রম যা একক বাইটের চেয়ে বড় হতে পারে । পাঠ্যটিকে কাঁচা বাইট (যেমন , ...) হিসাবে উপস্থাপন করতে একটি নির্দিষ্ট এনকোডিংয়ে পাঠ্য এনকোড করা যায় ।utf-8latin-1

নোট যে unicode এনকোড করা হয়নি ! পাইথন দ্বারা ব্যবহৃত অভ্যন্তরীণ প্রতিনিধিত্ব একটি বাস্তবায়ন বিশদ, এবং যতক্ষণ না এটি আপনার পছন্দসই কোড পয়েন্ট উপস্থাপন করতে সক্ষম হয় ততক্ষণ আপনি এটি সম্পর্কে যত্ন নেওয়া উচিত নয়।

বিপরীতে strপাইথন 2 বাইটের একটি সরল ক্রম । এটি পাঠ্য উপস্থাপন করে না!

আপনি মনে করতে পারেন unicodeকিছু টেক্সট একটি সাধারণ উপস্থাপনা, যার মাধ্যমে প্রতিনিধিত্ব বাইনারি ডেটা একটি ক্রম মধ্যে বিভিন্নভাবে এনকোড করা যেতে পারে str

দ্রষ্টব্য: পাইথন 3-তে, unicodeনতুন নামকরণ করা হয়েছিল strএবং bytesবাইটের একটি সরল ক্রমের জন্য একটি নতুন ধরণ রয়েছে।

কিছু পার্থক্য যা আপনি দেখতে পাচ্ছেন:

>>> len(u'à')  # a single code point
1
>>> len('à')   # by default utf-8 -> takes two bytes
2
>>> len(u'à'.encode('utf-8'))
2
>>> len(u'à'.encode('latin1'))  # in latin1 it takes one byte
1
>>> print u'à'.encode('utf-8')  # terminal encoding is utf-8
à
>>> print u'à'.encode('latin1') # it cannot understand the latin1 byte

নোট করুন যে আপনার ব্যবহারের ক্ষেত্রে strনির্দিষ্ট এনকোডিং উপস্থাপনের একক বাইটের উপর নিম্ন-স্তরের নিয়ন্ত্রণ রয়েছে, তবে unicodeআপনি কেবল কোড-পয়েন্ট পর্যায়ে নিয়ন্ত্রণ করতে পারবেন। উদাহরণস্বরূপ আপনি এটি করতে পারেন:

>>> 'àèìòù'
'\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9'
>>> print 'àèìòù'.replace('\xa8', '')
à�ìòù

এর আগে যা বৈধ ইউটিএফ -8 ছিল, তা আর নয়। একটি ইউনিকোড স্ট্রিং ব্যবহার করে আপনি এমনভাবে পরিচালনা করতে পারবেন না ফলে প্রাপ্ত স্ট্রিংটি বৈধ ইউনিকোড পাঠ্য নয়। আপনি একটি কোড পয়েন্ট মুছে ফেলতে পারেন, একটি কোড পয়েন্টকে একটি ভিন্ন কোড পয়েন্ট ইত্যাদি দিয়ে প্রতিস্থাপন করতে পারেন তবে আপনি অভ্যন্তরীণ উপস্থাপনের সাথে গোলযোগ করতে পারবেন না।


4
আপনার উত্তরের জন্য অনেক ধন্যবাদ, এটি অনেক সাহায্য করেছে! আমার কাছে সবচেয়ে স্পষ্ট করার অংশটি হল: "ইউনিকোড এনকোড করা হয়নি! অজগর দ্বারা ব্যবহৃত অভ্যন্তরীণ উপস্থাপনা একটি বাস্তবায়নের বিশদ, এবং আপনার এটির যত্ন নেওয়া উচিত নয় [...]"। সুতরাং, unicodeবস্তুগুলিকে সিরিয়ালকরণ করার সময় আমি অনুমান করি যে প্রথমে আমাদের encode()এগুলি যথাযথ এনকোডিং ফর্ম্যাটে স্পষ্টভাবে প্রকাশ করতে হবে, কারণ আমরা জানি না যে কোনটি অভ্যন্তরীণভাবে unicodeমান উপস্থাপনের জন্য ব্যবহৃত হচ্ছে ।
কেমনস

10
হ্যাঁ. আপনি যখন কিছু পাঠ্য সংরক্ষণ করতে চান (যেমন কোনও ফাইলের জন্য) আপনাকে এটিকে বাইট সহ উপস্থাপন করতে হবে, আপনাকে অবশ্যই এটি এনকোড করতে হবে। সামগ্রীটি পুনরুদ্ধার করার সময় আপনার ব্যবহার করা এনকোডিংটি জানতে হবে, যাতে কোনও বস্তুতে বাইটগুলি ডিকোড করতে সক্ষম হয় unicode
বাকুরিউ

আমি দুঃখিত, তবে যে বিবৃতিটি unicodeএনকোড করা হয়নি তা সম্পূর্ণ ভুল। ইউটিএফ -16 / ইউসিএস -2 এবং ইউটিএফ -32 / ইউসিএস -4 এছাড়াও এনকোডিং ... এবং ভবিষ্যতে এর আরও সম্ভবত তৈরি করা হবে। পয়েন্টটি হল, কেবলমাত্র বাস্তবায়নের বিশদ সম্পর্কে আপনার যত্ন নেওয়া উচিত নয় (এবং, প্রকৃতপক্ষে, আপনার উচিত নয়!), তবুও এর অর্থ এই নয় যে unicodeএটি এনকোডড নয়। এটা অবশ্যই এটি .decode()'ডি' হতে পারে কিনা তা সম্পূর্ণ ভিন্ন গল্প।
0xC0000022L

4
@ 0xC0000022L বাক্যটি সম্ভবত এটি অস্পষ্ট। এটি বলা উচিত: unicodeঅবজেক্টের অভ্যন্তরীণ প্রতিনিধিত্ব যা চান তা হতে পারে, অ-মানক সহ including Python3 বিশেষ করে + + unicode নেই কোনো অ-মানক অভ্যন্তরীণ উপস্থাপনা ব্যবহার যে ডেটার উপর নির্ভর করে পরিবর্তন রয়েছে। যেমন এটি একটি স্ট্যান্ডার্ড এনকোডিং নয় । টেক্সট স্ট্যান্ডার্ড হিসাবে ইউনিকোড কেবল কোডপয়েন্টগুলি সংজ্ঞায়িত করে যা পাঠ্যের বিমূর্ত উপস্থাপনা , স্ট্যান্ডার্ড ইউটিএফ-এক্স সহ মেমরিতে ইউনিকোড এনকোড করার অনেকগুলি উপায় রয়েছে পাইথন দক্ষতার জন্য নিজস্ব উপায় ব্যবহার করে।
বাকুরিউ

4
@ 0xC0000022L এছাড়াও ইউটিএফ -16 একটি এনকোডিং হওয়া সত্য যে সিপিথনের অবজেক্টের সাথে কোনও সম্পর্ক নেইunicode , কারণ এটি ইউটিএফ -16 এবং ইউটিএফ -32 ব্যবহার করে না । এটি একটি অ্যাডহক উপস্থাপনা ব্যবহার করে এবং আপনি যদি ব্যবহার করতে হয় এমন সত্যিকারের বাইটে ডেটা এনকোড করতে চান encode। এছাড়াও: ভাষা কীভাবে unicodeপ্রয়োগ করা হয় তা নির্দেশ দেয় না , সুতরাং পাইথনের বিভিন্ন সংস্করণ বা বাস্তবায়ন বিভিন্ন অভ্যন্তরীণ উপস্থাপনা করতে পারে (এবং থাকতে পারে )।
বাকুরিউ

41

ইউনিকোড এবং এনকোডিংগুলি সম্পূর্ণ ভিন্ন, সম্পর্কিত নয়।

ইউনিকোড

প্রতিটি চরিত্রের জন্য একটি সংখ্যার আইডি নির্ধারণ করে:

  • 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)

উদাহরণ:

  • এ → 1100001 (0x61)

আপনি এই টেবিলের সমস্ত ম্যাপিং দেখতে পাবেন ।

আইএসও 8859-1 (ওরফে ল্যাটিন -১)

দৈর্ঘ্য 8 এর বিট নিদর্শনগুলিতে মানচিত্র 191 টি অক্ষর (কোড পয়েন্ট U + 0020 থেকে U + 007E এবং U + 00A0 থেকে U + 00FF পর্যন্ত)।

উদাহরণ:

  • a → 01100001 (0x61)
  • → 11100001 (0xE1)

আপনি এই টেবিলের সমস্ত ম্যাপিং দেখতে পাবেন ।

ইউটিএফ -8

দৈর্ঘ্য 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 হয় (যদি আপনি বাইনারি সংখ্যা হিসাবে এনকোডিংয়ের বিট প্যাটার্নটি ব্যাখ্যা করেন) তবে এটি খাঁটি কাকতালীয় ঘটনা।


31

আপনার টার্মিনালটি ইউটিএফ -8 এ কনফিগার করা হয়েছে।

মুদ্রণ aকাজ করে যে ঘটনা একটি কাকতালীয়; আপনি টার্মিনালে কাঁচা UTF-8 বাইট লিখছেন। দুটিa দৈর্ঘ্যের মান , দুটি বাইট সমন্বিত, হেক্সের মান সি 3 এবং এ 1 হয়, তবে কোডডপয়েন্ট U + 00E1 সমেত দৈর্ঘ্যের এক ইউনিকোড মান ।ua

দৈর্ঘ্যের এই পার্থক্যটি ইউনিকোড মানগুলি ব্যবহারের একটি প্রধান কারণ; আপনি সহজেই বাইট স্ট্রিংয়ে পাঠ্য অক্ষরের সংখ্যা পরিমাপ করতে পারবেন না ; len()একটি বাইট স্ট্রিং এর আপনি বলে কত বাইট ব্যবহার করা হয়, কিভাবে না অনেক অক্ষর এনকোড করা হয়।

আপনি ইউনিকোড মানকে বিভিন্ন আউটপুট এনকোডিংগুলিতে এনকোড করার সময় আপনি পার্থক্যটি দেখতে পাবেন :

>>> a = 'á'
>>> ua = u'á'
>>> ua.encode('utf8')
'\xc3\xa1'
>>> ua.encode('latin1')
'\xe1'
>>> a
'\xc3\xa1'

নোট করুন যে ইউনিকোড স্ট্যান্ডার্ডের প্রথম 256 কোডপয়েন্টগুলি লাতিন 1 স্ট্যান্ডার্ডের সাথে মেলে, তাই ইউ + 00E1 কোডপয়েন্টটি হেক্স মান E1 সহ বাইট হিসাবে ল্যাটিন 1 এ এনকোড করা হয়েছে।

তদ্ব্যতীত, পাইথন ইউনিকোড এবং বাইট স্ট্রিংগুলির উপস্থাপনাগুলিতে একইভাবে এস্কেপ কোডগুলি ব্যবহার করে এবং নিম্ন কোড পয়েন্টগুলি যেগুলি প্রিন্টযোগ্য এএসসিআইআই হয় না সেগুলিও \x..পালানোর মানগুলি ব্যবহার করে প্রতিনিধিত্ব করা হয় । এই জন্যই 128 এবং 255 সৌন্দর্য মধ্যে একটি কোড বিন্দু দিয়ে একটি ইউনিকোড স্ট্রিং শুধু ল্যাটিন 1 এনকোডিং মত। আপনার যদি ইউ + 00FF এর বাইরে কোডেপয়েন্টের সাথে একটি ইউনিকোড স্ট্রিং থাকে তবে আলাদা পালানোর ক্রম থাকে, \u....পরিবর্তে ব্যবহৃত হয়, চার-অঙ্কের হেক্স মান সহ।

দেখে মনে হচ্ছে আপনি ইউনিকোড এবং একটি এনকোডিংয়ের মধ্যে পার্থক্য কী তা এখনও পুরোপুরি বুঝতে পারেন নি। আপনি চালিয়ে যাওয়ার আগে দয়া করে নীচের নিবন্ধগুলি পড়ুন:


আমি আরও পরীক্ষার মাধ্যমে আমার প্রশ্ন সম্পাদনা করেছি। আমি কিছুক্ষণের জন্য ইউনিকোড এবং বিভিন্ন এনকোডিংয়ের জন্য পড়ছি এবং আমি মনে করি আমি তত্ত্বটি বুঝতে পেরেছি, তবে পাইথন কোডটি পরীক্ষা করার সময় আমি কী ঘটছে তা ধরতে পারি না
কেমনস

4
ল্যাটিন -1 এনকোডিংটি ইউনিকোড স্ট্যান্ডার্ডের প্রথম 256 কোডপয়েন্টের সাথে মেলে। এই জন্যই করতে U + এ 00E1 এনকোড \xe1ল্যাটিন 1.
Martijn Pieters

4
এটি ইউনিকোডের একক অতি গুরুত্বপূর্ণ দিক। এটি কোনও এনকোডিং নয় । এটি পাঠ্য। ইউনিকোড একটি প্রমিত অনেক, আরো অনেক, কি codepoints সংখ্যা বা হোয়াইটস্পেস বা অন্য বিভাগগুলির উপর তথ্যের মত, ডানদিকে বা ডান থেকে বামে বাম প্রদর্শিত হওয়া উচিত অন্তর্ভুক্ত যে, ইত্যাদি ইত্যাদি ইত্যাদি
Martijn Pieters

4
এটি ইউনিকোড বলতে "ইন্টারফেস" এর মতো এবং এনকোডিংটি একটি বাস্তব "বাস্তবায়ন" এর মতোই বলে like
কেমনস

4
@ ভারুন: আপনি অবশ্যই একটি পাইথন 2 সংকীর্ণ বিল্ড ব্যবহার করছেন যা ইউসিএস -2 অভ্যন্তরীণভাবে ব্যবহার করে এবং ইউ + এফএফএফএফের মাধ্যমে যে কোনও কিছুকে দৈর্ঘ্য হিসাবে দুটি হিসাবে ভুল ব্যাখ্যা করে। পাইথন 3 এবং একটি ইউসিএস -2 (প্রশস্ত) বিল্ডটি আপনাকে দৈর্ঘ্যটি 1 টি দেখায়
মার্টিজন পিটারস

2

আপনি যখন একটি ইউনিকোড হিসাবে সংজ্ঞায়িত করেন, অক্ষর a এবং equal সমান হয়। অন্যথায় two দুটি চর হিসাবে গণনা করা হয়। লেন (ক) এবং লেন (আউ) চেষ্টা করুন। এ ছাড়াও, অন্যান্য পরিবেশের সাথে কাজ করার সময় আপনার এনকোডিং থাকতে পারে। উদাহরণস্বরূপ আপনি যদি এমডি 5 ব্যবহার করেন তবে আপনি a এবং ua এর জন্য বিভিন্ন মান পাবেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.