ইউটিএফ -8 এবং ইউনিকোডের মধ্যে পার্থক্য কী?


503

আমি মানুষের কাছ থেকে বিরোধী মতামত শুনেছি - উইকিপিডিয়া ইউটিএফ -8 পৃষ্ঠা অনুসারে।

তারা একই জিনিস, তাই না? কেউ কি স্পষ্ট করতে পারেন?


1
এই ডাব্লুআইআইকিআই ইউনিকোড এবং ইউটিএফ সম্পর্কে যা লিখেছে তা আমার মতে ঠিক is এ সম্পর্কে কিছু মন্তব্য ঘোরানো হয়েছে: "ইউটিএফ -8 (বা অন্য কোনও বহু-বাইট এনকোডিং) দ্বারা কোনও অক্ষরের মাঝখানে একটি স্ট্রিং বিভক্ত করা বা কাটা সম্ভব, যার ফলে একটি অবৈধ স্ট্রিং হতে পারে" " সুতরাং একটি স্ট্রিং যা ইউটিএফ -8 এনকোড হয়ে যায় সেগুলি আর স্ট্রিং নয় বাইট অ্যারে বা বাইট স্ট্রিম। স্ট্রিং তৈরির অক্ষরগুলি এনকোড হয়ে যায়। অবশ্যই এটি ডিকোড করা যেতে পারে। এখন অবশ্যই আপনি স্টার্ট-বাইটের পরে বা নিম্নলিখিত বাইটের পরে একটি utf-8 সিকোয়েন্স কেটে ফেলতে পারেন তবে কেন কেউ এটি করা উচিত?
উজ্জ্বল

স্ট্রিং ডেটা প্রকার সম্পর্কে এই নিবন্ধটি শিক্ষামূলক: মরোরই ডটকম / ২০১৩ / ১১ /২ //the - string - type - is- ব্রোকেন - কখনও কখনও স্ট্রিং এবং তাদের বাইট-স্তরের উপাদানগুলির সাথে কাজ করার সময় আপনি অজান্তে একটি অক্ষর অর্ধেক কাটাতে পারেন ।
এভেরেট

উত্তর:


495

অন্যরা যে উত্তর দিয়েছে সেগুলি সম্প্রসারণ করতে:

কম্পিউটারগুলি আদর্শভাবে প্রদর্শন করা উচিত এমন প্রচুর অক্ষর সহ আমরা প্রচুর ভাষা পেয়েছি। ইউনিকোড প্রতিটি অক্ষরকে একটি অনন্য নম্বর বা কোড পয়েন্ট বরাদ্দ করে।

কম্পিউটারগুলি বাইটের মতো সংখ্যার সাথে ডিল করে ... এখানে কিছুটা ইতিহাস এড়িয়ে যাওয়া এবং মেমরির সমাধানের বিষয়গুলি উপেক্ষা করে 8-বিট কম্পিউটারগুলি 8-বিট বাইটকে সবচেয়ে বড় সংখ্যাগত ইউনিট হিসাবে মনে করবে যা সহজেই হার্ডওয়্যারে উপস্থাপিত হয়, 16-বিট কম্পিউটারগুলি প্রসারিত হবে যে দুটি বাইট, এবং আরও।

পুরানো চরিত্রের এনকোডিংগুলি যেমন এএসসিআইআই (পূর্ব-পূর্ব) 8-বিট যুগের, এবং সেই সময়কার কম্পিউটারে অর্থাত্ ইংরেজিকে 0 থেকে 127 (b বিট) পর্যন্ত সংখ্যায় ক্রম করার চেষ্টা করুন। বর্ণমালায় 26 টি অক্ষর সহ মূলধন এবং অ-মূলধন উভয় আকারে, সংখ্যা এবং বিরাম চিহ্নগুলি, যা বেশ কার্যকরভাবে কাজ করেছিল। অন্যান্য, অ-ইংরাজী ভাষার জন্য এএসসিআইআই একটি অষ্টম বিট দ্বারা প্রসারিত হয়েছে, তবে এই সম্প্রসারণ দ্বারা উপলব্ধ অতিরিক্ত 128 নম্বর / কোড পয়েন্টগুলি ভাষার প্রদর্শিত হওয়ার উপর নির্ভর করে বিভিন্ন অক্ষরে ম্যাপ করা হবে। আইএসও -8859 মান এই ম্যাপিংয়ের সর্বাধিক সাধারণ রূপ; আইএসও -8859-1 এবং আইএসও -8859-15 (এছাড়াও আইএসও-ল্যাটিন -1, লাতিন 1, এবং হ্যাঁ 8859 আইএসও স্ট্যান্ডার্ডের দুটি পৃথক সংস্করণও রয়েছে)।

আপনি যখন একাধিক ভাষার অক্ষর উপস্থাপন করতে চান তবে এটি পর্যাপ্ত নয়, সুতরাং সমস্ত উপলভ্য অক্ষরকে একক বাইটে ক্র্যামিং করা কার্যকর হবে না।

মূলত দুটি ভিন্ন ধরণের এনকোডিং রয়েছে: একটি আরও বিট যুক্ত করে মান সীমা প্রসারিত করে। এই এনকোডিংগুলির উদাহরণগুলি ইউসিএস 2 (2 বাইট = 16 বিট) এবং ইউসিএস 4 (4 বাইট = 32 বিট) হবে। এএসসিআইআই এবং আইএসও -8859 স্ট্যান্ডার্ডের মতো তারা সহজাতভাবে একই সমস্যায় ভুগছেন, কারণ তাদের মান সীমাটি এখনও সীমাবদ্ধ, এমনকি সীমাটি চূড়ান্তভাবে বেশি হলেও।

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

মাল্টি-বাইট এনকোডিংগুলি (আমার উপরের ব্যাখ্যার পরে মাল্টি-ইউনিট বলতে হবে) এর সুবিধাটি হ'ল তারা তুলনামূলকভাবে স্থান-দক্ষ, তবে ডাউনসাইড যেগুলি অপারেশনগুলি যেমন সাবস্ট্রিংগুলি, তুলনা ইত্যাদির সন্ধান ইত্যাদির জন্য ইউনিকোড কোডে অক্ষরগুলি ডিকোড করতে হয় এই জাতীয় ক্রিয়াকলাপ সম্পাদন করার আগে পয়েন্টগুলি (যদিও কিছু শর্টকাট রয়েছে)।

ইউসিএস স্ট্যান্ডার্ড এবং ইউটিএফ স্ট্যান্ডার্ড উভয়ই ইউনিকোডে সংজ্ঞায়িত কোড পয়েন্টগুলি এনকোড করে। তত্ত্ব অনুসারে, এই এনকোডিংগুলি যে কোনও সংখ্যার (এনকোডিং সমর্থন করে এমন সীমার মধ্যে) এনকোড করতে ব্যবহৃত হতে পারে - তবে অবশ্যই এই এনকোডিংগুলি ইউনিকোড কোড পয়েন্টগুলি এনকোড করার জন্য তৈরি করা হয়েছিল। এবং এটাই তাদের মধ্যে আপনার সম্পর্ক।

উইন্ডোজ তথাকথিত "ইউনিকোড" স্ট্রিংগুলিকে ইউটিএফ -16 স্ট্রিং হিসাবে পরিচালনা করে, যখন বেশিরভাগ ইউনিক্স আজকাল ইউটিএফ -8 এ ডিফল্ট হয়। ইউটিএফ -8-তে ইউনিট আকার ASCII এর মতো হওয়ায় HTTP এর মতো যোগাযোগের প্রোটোকলগুলি ইউটিএফ -8 এর সাথে সবচেয়ে ভাল কাজ করার প্রবণতা রয়েছে এবং এ জাতীয় বেশিরভাগ প্রোটোকল ASCII যুগে নকশা করা হয়েছিল। অন্যদিকে, ইউটিএফ -16 সমস্ত জীবিত ভাষার প্রতিনিধিত্ব করার সময় সেরা গড় স্থান / প্রসেসিং কর্মক্ষমতা দেয় ।

ইউনিকোড স্ট্যান্ডার্ড 32 বিটগুলিতে প্রতিনিধিত্ব করার চেয়ে কম কোড পয়েন্টগুলি সংজ্ঞায়িত করে। সুতরাং সমস্ত ব্যবহারিক উদ্দেশ্যে, ইউটিএফ -32 এবং ইউসিএস 4 একই এনকোডিং হয়ে গেছে, আপনি ইউটিএফ -32-তে মাল্টি-ইউনিট অক্ষরগুলির সাথে ডিল করার সম্ভাবনা কম।

আশা করি কিছু বিবরণ পূরণ করে।


9
ধারণামূলকভাবে, ইউসিএস -2 এবং ইউসিএস -4 হ'ল অক্ষর সেট , অক্ষর এনকোডিং নয় (তাই নাম)।
যান্ত্রিক শামুক

74
এই পোস্টে টুক্কা ত্রুটিগুলি হল সেনা। সেখানে আইএসও 8859. হওয়া ASCII মাত্র 2 সংস্করণ চেয়ে বেশি ইংরেজি জন্য কাজ না করে, কোঁকড়া কোট, শতাংশ চিহ্ন, কথা, & আরো অনেক কিছুর সাথে-ইউনিকোড হয় ভালো জিনিস অনুপস্থিত না প্রায় অ ইংরেজি; ইংরেজিরও দরকার আছে !! কোনও কোডপয়েন্টগুলি কোনও এনকোডিংয়ে 4 বাইটের বেশি দখল করে না ; এই 6-বাইট ব্যবসা ফ্ল্যাট-আউট ভুল। আপনি যে কোনও ইউনিকোড স্কেলারের মানটি ইউটিএফ-এনকোড করতে পারবেন না কারণ এটি বলেছেন: সার্গেটস এবং 66 other টি ননচার্যাক্টর সমস্ত নিষিদ্ধ। ইউসিএস -4 এবং ইউটিএফ -32 এক নয়। কোনও মাল্টি-ইউনিট ইউটিএফ -32 নেই। ইউটিএফ -16 তারা ভান করার মতো দক্ষ নয় - & সি ও সি & সি!
tchrist

1
এএসসিআইআইতেও পাউন্ড সাইন থাকে না and এবং অবশ্যই ইউরো চিহ্নও থাকে না which (যা এএসসিআইআইয়ের চেয়ে যথেষ্ট কম বয়সী)।
ট্রিগ

1
@tchrist সৌন্দর্য 6 বাইট হয় সব পরে অভাবনীয় নয়। এই দেখুন: joelonsoftware.com/articles/Unicode.html যা বোঝায় সেখানে থেকে একটি অক্ষর স্থান যে 0x04000000করতে 0x7FFFFFFF, বা বাইনারি মধ্যে এটা 1111110v 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv - এবং প্রকৃতপক্ষে 6 বাইট। যাইহোক, 6 বাইট সর্বোচ্চ হয় , এবং নিবন্ধটি বিভ্রান্তিকরভাবে "ছয় বাইট বা তার বেশি " দাবি করে না ।
সিনট্যাক্সেরর

12
@ সাইন্ট্যাক্সেরর: "কেবলমাত্র 128 বা তারও বেশি কোড পয়েন্টগুলি 2, 3 ব্যবহার করে সংরক্ষণ করা হয়, আসলে 6 বাইট পর্যন্ত" " লেখার সময় সঠিক ছিল, তবে পরে একই বছর (বারো বছর আগে) এটি অবৈধ করা হয়েছিল। en.wikedia.org/wiki/UTF-8 বলেছে "31 বিট (ইউনিভার্সাল ক্যারেক্টার সেটের মূল সীমা) পর্যন্ত সংখ্যার মূল স্পেসিফিকেশনটি আচ্ছাদিত। নভেম্বর 2003-এ, ইউটিএফ -8 আরএফসি 3629 দ্বারা ইউ + এ শেষ হওয়ার জন্য সীমাবদ্ধ ছিল 10 ইউএফএফএফএফ, ইউটিএফ -16 অক্ষর এনকোডিংয়ের সীমাবদ্ধতার সাথে মিলে যায় This এটি সমস্ত 5- এবং 6-বাইট ক্রমগুলি এবং 4-বাইট অনুক্রমের প্রায় অর্ধেক সরিয়ে ফেলে ""
মাকিং হাঁস

237

এই বিষয়টি চিত্রিত করার জন্য আমাকে একটি উদাহরণ ব্যবহার করুন:

A chinese character:      汉
it's unicode value:       U+6C49
convert 6C49 to binary:   01101100 01001001

এখন পর্যন্ত যাদুকর কিছুই নয়, এটি খুব সাধারণ। এখন, আসুন আমরা আমাদের হার্ড ড্রাইভে এই চরিত্রটি সংরক্ষণ করার সিদ্ধান্ত নিয়েছি। এটি করতে, আমাদের অক্ষরটি বাইনারি ফর্ম্যাটে সংরক্ষণ করতে হবে। '01101100 01001001' হিসাবে আমরা সহজেই এটি সঞ্চয় করতে পারি। সম্পন্ন!

তবে এক মিনিট অপেক্ষা করুন, '01101100 01001001' একটি চরিত্র বা দুটি অক্ষর? আপনি জানতেন যে এটি একটি চরিত্র কারণ আমি আপনাকে বলেছিলাম, কিন্তু যখন কোনও কম্পিউটার এটি পড়বে, তখন তার কোনও ধারণা নেই। সুতরাং কম্পিউটারটিকে এটির মতো আচরণ করার জন্য আমাদের কিছু ধরণের "এনকোডিং" প্রয়োজন need

এখানেই 'ইউটিএফ -8' এর বিধিগুলি আসে: http://www.fileformat.info/info/unicode/utf8.htm

Binary format of bytes in sequence

1st Byte    2nd Byte    3rd Byte    4th Byte    Number of Free Bits   Maximum Expressible Unicode Value
0xxxxxxx                                                7             007F hex (127)
110xxxxx    10xxxxxx                                (5+6)=11          07FF hex (2047)
1110xxxx    10xxxxxx    10xxxxxx                  (4+6+6)=16          FFFF hex (65535)
11110xxx    10xxxxxx    10xxxxxx    10xxxxxx    (3+6+6+6)=21          10FFFF hex (1,114,111)

উপরের সারণী অনুসারে, আমরা যদি 'ইউটিএফ -8' ফর্ম্যাটটি ব্যবহার করে এই চরিত্রটি সংরক্ষণ করতে চাই তবে আমাদের কিছু অক্ষরটিকে আমাদের 'হেডার' দিয়ে উপস্থাপন করতে হবে। আমাদের চাইনিজ চরিত্রটি 16 বিট দীর্ঘ (বাইনারি মানটি নিজে গণনা করুন), সুতরাং পর্যাপ্ত স্থান সরবরাহ করার কারণে আমরা 3 নং সারিতে বিন্যাসটি ব্যবহার করব:

Header  Place holder    Fill in our Binary   Result         
1110    xxxx            0110                 11100110
10      xxxxxx          110001               10110001
10      xxxxxx          001001               10001001

এক লাইনে ফলাফল লেখা:

11100110 10110001 10001001

এটি চীনা অক্ষরের ইউটিএফ -8 (বাইনারি) মান! (এটি নিজে নিশ্চিত করুন : http://www.fileformat.info/info/unicode/char/6c49/index.htm )

সারসংক্ষেপ

A chinese character:      汉
it's unicode value:       U+6C49
convert 6C49 to binary:   01101100 01001001
embed 6C49 as UTF-8:      11100110 10110001 10001001

পিএস আপনি অজগর এই বিষয় শিখতে চান, এখানে ক্লিক করুন


6
"তবে এক মিনিট অপেক্ষা করুন, '01101100 01001001' একটি চরিত্র বা দুটি চরিত্র? আপনি জানতেন এটি একটি চরিত্র কারণ আমি আপনাকে বলেছি, কিন্তু যখন কোনও কম্পিউটার এটি পড়বে, তখন এটির কোনও ধারণা নেই So সুতরাং আমাদের কিছু ধরণের" এনকোডিং "দরকার কম্পিউটারটিকে এটির মতো ব্যবহার করতে বলুন। আচ্ছা ঠিক আছে, তবে কম্পিউটারটি এখনও জানে না যে এটি utf-8 দিয়ে এনকোড করা উচিত?
Koray Tugay

15
@ KorayTugay কম্পিউটার কোন এনকোডিং ব্যবহার করবে তা জানে না। আপনি যখন ফাইলটিতে একটি চরিত্র সংরক্ষণ করেন এবং আপনি যখন ফাইল থেকে একটি অক্ষর পড়ে থাকেন তখন আপনাকে তা বলতে হবে।
চেং

3
@ কননর কম্পিউটার কোন ফর্ম্যাটটি ব্যবহার করবে তা জানে না। আপনি দস্তাবেজটি সংরক্ষণ করার সময়, পাঠ্য সম্পাদককে স্পষ্টভাবে তার এনকোডিংটি utf-8 বা ব্যবহারকারী যে ফর্ম্যাটটি ব্যবহার করতে চান তা নির্ধারণ করতে হবে। এছাড়াও, যখন কোনও পাঠ্য সম্পাদক প্রোগ্রাম কোনও ফাইল পড়ে, তখন এটি সঠিকভাবে ডিকোড করার জন্য একটি পাঠ্য এনকোডিং স্কিম নির্বাচন করতে হবে। আপনি যখন কোনও চিঠি লিখছেন এবং লিখছেন তখন একই জিনিসটি পাঠ্য সম্পাদককে জানতে হবে যে আপনি কোন স্কিম ব্যবহার করছেন যাতে এটি এটি সঠিকভাবে সংরক্ষণ করবে save
চেং

2
সুতরাং কিভাবে এই শিরোনাম ব্যাখ্যা করা হয়? যদি আমি প্রথম টেবিলটি লক্ষ্য করি তবে আমার মনে হয়: বাইটটি যদি কিছুটা দিয়ে শুরু হয় 0তবে অক্ষরটি 1 টি দংশন (বর্তমানের) দ্বারা উপস্থাপিত হয়, যদি বাইট শুরু হয় 110তবে অক্ষরটি 2 বাইট দ্বারা উপস্থাপিত হয় (বর্তমান এবং পরবর্তী একটি ( বাকী বিট পরে 10)), বাইট শুরু 1110হলে অক্ষরটি 3 বাইট, বর্তমান এবং পরবর্তী 2 বাইট (পরে বিট পরে 10) দ্বারা উপস্থাপিত হয়
জবয়

2
ইউটিএফ -8 এর উপর 10 টি নিবন্ধ পড়ুন; এটি পড়ার পরে আমি 10 সেকেন্ডের মধ্যে বুঝলাম :)
jrhee17

201

দুর্ভাগ্যক্রমে "ইউনিকোড" প্রসঙ্গের উপর নির্ভর করে বিভিন্নভাবে ব্যবহৃত হয়। এর সর্বাধিক সঠিক ব্যবহার (আইএমও) কোডেড অক্ষর সেট হিসাবে হ'ল - অর্থাত্ অক্ষরের একটি সেট এবং অক্ষর এবং পূর্ণসংখ্যা কোড পয়েন্টগুলির মধ্যে একটি ম্যাপিং যা তাদের উপস্থাপন করে।

ইউটিএফ -8 হ'ল একটি অক্ষর এনকোডিং - বাইটের ক্রম থেকে অক্ষরের অনুক্রম এবং তার বিপরীতে রূপান্তর করার একটি উপায়। এটি পুরো ইউনিকোড চরিত্রের সেটটি জুড়েছে। ASCII অক্ষর অনুযায়ী একক বাইট হিসাবে এনকোড করা হয়েছে এবং অন্যান্য অক্ষরগুলি তাদের সঠিক কোড পয়েন্টের ভিত্তিতে আরও বাইট নেয় (বর্তমানে সংজ্ঞায়িত সমস্ত কোড পয়েন্টের জন্য 4 বাইট পর্যন্ত, যেমন U-0010FFF পর্যন্ত, এবং প্রকৃতপক্ষে 4 বাইট পর্যন্ত সামলাতে পারে ইউ-001FFFFF)।

"ইউনিকোড" যখন কোনও অক্ষর এনকোডিংয়ের নাম হিসাবে ব্যবহৃত হয় (যেমন। নেট এনকোডিং U ইউনিকোড সম্পত্তি হিসাবে) এর সাধারণত সাধারণত ইউটিএফ -16 বোঝায় যা সাধারণত দুটি অক্ষর হিসাবে সাধারণ অক্ষরকে এনকোড করে। কিছু প্ল্যাটফর্ম (উল্লেখযোগ্যভাবে। নেট এবং জাভা) তাদের "নেটিভ" অক্ষর এনকোডিং হিসাবে ইউটিএফ -16 ব্যবহার করে। এটি চুলচেরা সমস্যার দিকে নিয়ে যায় যদি আপনার এমন একটি অক্ষর সম্পর্কে চিন্তা করতে হয় যা একটি একক ইউটিএফ -16 মান (তারা "সারোগেট জোড়া" হিসাবে এনকোডড থাকে) - তবে আইএমই সম্পর্কে কখনও চিন্তা করে না।

ইউনিকোডের কয়েকটি রেফারেন্স:


16
আমি মনে করি ইউটিএফ -16 উইন্ডোজ প্ল্যাটফর্মে কেবল "ইউনিকোড" এর সমান। লোকেরা * নিক্সে ডিফল্টরূপে ইউটিএফ -8 ব্যবহার করার ঝোঁক। যদিও +1, ভাল উত্তর
জলফ

10
@ ক্রিস: না, আইএসও -8859-1 ইউটিএফ -8 নয় । ইউটিএফ -8 ইউ + 0080 থেকে ইউ +00 এফএফ এ দুটি বাইট হিসাবে নয়, একটি নয় enc উইন্ডোজ 1252 এবং আইএসও -8859-1 বেশিরভাগ ক্ষেত্রে একই, তবে আমি যদি সঠিকভাবে মনে করি তবে 0x80 এবং 0x99 মানের মধ্যে এটির মধ্যে পার্থক্য রয়েছে, যেখানে আইএসও 8859-1 এর একটি "গর্ত" রয়েছে তবে সিপি 1252 অক্ষর সংজ্ঞায়িত করে।
জন স্কেটি

13
ইউটিএফ -16 কে "ইউনিকোড" বলার ধারণাটি বিভ্রান্ত হওয়ার সম্ভাবনার কারণে আমার সাথে অস্বাচ্ছন্দ্য বজায় রেখেছে - যদিও এটি কেবলমাত্র নেট নেট কনভেনশন হিসাবে পরিষ্কারভাবে চিহ্নিত করা হয়েছিল। ইউটিএফ -16 ইউনিকোডকে উপস্থাপন করার একটি উপায়, তবে এটি "ইউনিকোড এনকোডিং" নয়।
thomasrutter

6
@ উনউসেন: ইউটিএফ -8 এর জন্য সারোগেট জোড়ের দরকার নেই। এটি কেবল প্রগতিশীল দীর্ঘতর বাইট সিকোয়েন্সগুলি ব্যবহার করে নন-বিএমপি অক্ষরগুলি উপস্থাপন করে।
জন স্কিটি

5
@ রইনিমির: হ্যাঁ, "ইউনিকোড" দুর্ভাগ্যক্রমে সাধারণত উইন্ডোজে "ইউটিএফ -16" বোঝাতে ব্যবহৃত হয়।
জন স্কিটি

108

তারা একই জিনিস নয় - ইউটিএফ -8 ইউনিকোড এনকোডিংয়ের একটি বিশেষ উপায়।

আপনার অ্যাপ্লিকেশন এবং আপনি যে ডেটা ব্যবহার করতে চান তার উপর নির্ভর করে আপনি প্রচুর বিভিন্ন এনকোডিং বেছে নিতে পারেন। আমার জানা হিসাবে ইউটিএফ -8, ইউটিএফ -16 এবং ইউটিএফ -32 সর্বাধিক সাধারণ।


10
তবে মুল বক্তব্যটি হ'ল কিছু সম্পাদক ফাইলটিকে "ইউনিকোড" বা "ইউটিএফ -8" হিসাবে সংরক্ষণ করার প্রস্তাব দেন। সুতরাং সেই ক্ষেত্রে "ইউনিকোড" সম্পর্কে উল্লেখটি ইউটিএফ -১ 16 আমি প্রয়োজনীয় বলে মনে করি।
serhio

71

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


2
তবে মুল বক্তব্যটি হ'ল কিছু সম্পাদক ফাইলটিকে "ইউনিকোড" বা "ইউটিএফ -8" হিসাবে সংরক্ষণ করার প্রস্তাব দেন। সুতরাং সেই ক্ষেত্রে "ইউনিকোড" সম্পর্কে উল্লেখটি ইউটিএফ -১ 16 আমি প্রয়োজনীয় বলে মনে করি।
serhio

একটি সংখ্যা, যা একটি চরিত্র উপস্থাপন করে পাশাপাশি ASCII করে।
উজ্জ্বল

6
এই পৃষ্ঠায় থাকা উত্তরগুলি দেখার আগে এবং পরে এটি পড়ুন
ডডজি

33

ইউনিকোড হল এমন একটি মান যা সংজ্ঞা দেয়, পাশাপাশি আইএসও / আইইসি 10646, ইউনিভার্সাল ক্যারেক্টার সেট (ইউসিএস) যা ব্যবহারিকভাবে সমস্ত জ্ঞাত ভাষার প্রতিনিধিত্ব করার জন্য প্রয়োজনীয় সমস্ত বিদ্যমান অক্ষরের একটি সুপারসেট।

ইউনিকোড তার পুস্তকের প্রতিটি অক্ষরকে একটি নাম এবং একটি সংখ্যা ( অক্ষর কোড , বা কোড-পয়েন্ট ) নির্ধারণ করে।

ইউটিএফ -8 এনকোডিং , কম্পিউটার মেমরিতে এই অক্ষরগুলি ডিজিটালি উপস্থাপন করার একটি উপায়। ইউটিএফ -8 প্রতিটি কোড-পয়েন্টকে অক্টেটের ক্রম (8-বিট বাইট) ম্যাপ করে

যেমন,

ইউসিএস চরিত্র = ইউনিকোড হ্যান চরিত্র

ইউসিএস কোড-পয়েন্ট = ইউ + 24 বি 62

ইউটিএফ -8 এনকোডিং = এফ 0 এ 4 এডি এ 2 (হেক্স) = 11110000 10100100 10101101 10100010 (বিন)


না, ইউটিএফ -8 মানচিত্রগুলি কেবলমাত্র 127 এর চেয়ে বেশি সিকোয়েন্সে কোডপয়েন্টস 0 0 থেকে 127 পর্যন্ত সমস্ত কিছু ক্রম নয় তবে একটি একক বাইট। বিটিডব্লিউ, এএসসিআইআই একটি সংখ্যাকে একটি চরিত্রের নামও বরাদ্দ করে, তাই ইউনিকোড একই কাজ করে। তবে ইউনিকোড কোডপয়েন্ট 127 এ থামছে না তবে 0x10ffff পর্যন্ত যায়।
উজ্জ্বল

2
@ ব্রাইটলি আমার পার্থক্য আসকি অক্ষরগুলি সত্যই একটি একক বাইট ক্রমের সাথে ম্যাপ করা হয়। প্রথম বিট, যা আসকি অক্ষরগুলির কোডের ক্ষেত্রে 0 হয়, এটি নির্দেশ করে যে কতগুলি বাইট অনুসরণ করবে - শূন্য। http://www.wikiwand.com/en/UTF-8#/Descriptionপ্রথম সারিতে একবার দেখুন।
নাইটাইট্রেইল

আমার জন্য একটি ক্রম একাধিক বাইট নিয়ে গঠিত of ইউটিএফ -8 এর মধ্যে একটি এএসসিআইআই চরিত্রটি একটি একক বাইট হিসাবে রয়েছে, সর্বাধিক তাৎপর্যপূর্ণ বিটটি 0 এ সেট করা হয়েছে। 127 এর চেয়ে বেশি কোডপয়েন্ট রয়েছে তারপরে সিকোয়েন্সগুলি দরকার যা সর্বদা একটি স্টার্টবাইট এবং এক, দুই বা তিনটি নিম্নলিখিত বাইট থাকে। তাহলে আপনি কেন একটি একক বাইটকে "সিকোয়েন্স" বলবেন?
উজ্জ্বল

ভাল ... অনেক সময় ইংরাজী ভাষার আইনজীবীরা সফ্টওয়্যারটিতে ইচ্ছাকৃত অপব্যবহারের কারণে বিভ্রান্ত হতে পারেন। এখানেও একই ঘটনা। আপনি এটি নিয়ে তর্ক করতে পারেন। তবে এটি এটিকে আরও পরিষ্কার করে তুলবে না।
রাত্রে ট্রিলস

1
@ ব্রবিটি হুম্ম্ম, গণিতে, 0 টির একটি ক্রম এটি ঠিক আছে। 1 উপাদানের একটি ক্রম এখানেও ঠিক আছে।
chux - মনিকা পুনরায় স্থাপন করুন

24

ইউনিকোড কেবলমাত্র একটি মান যা এই অক্ষর সেটটি এনকোড করতে একটি অক্ষর সেট ( ইউসিএস ) এবং এনকোডিংস ( ইউটিএফ ) সংজ্ঞায়িত করে । তবে সাধারণভাবে, ইউনিকোডের মানটি নয় বরং চরিত্রের সেটে রেফার করা হয়।

নিখুঁত ন্যূনতম প্রতিটি সফ্টওয়্যার বিকাশকারী পড়ুন , ইতিবাচকভাবে অবশ্যই ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে জানতে হবে (কোনও অজুহাত!) এবং 5 মিনিটে ইউনিকোড


1
@ সেরিও: আমি জানি। যদিও এখানে তিনটি পৃথক ইউটিএফ -16 এনকোডিং রয়েছে: দুটি সুস্পষ্ট ইউটিএফ -16 এলইটি এবং ইউটিএফ -16 বিই এবং অন্তর্নিহিত ইউটিএফ -16 যেখানে বিওএম দিয়ে অন্তর্নিহিততা নির্দিষ্ট করা হয়েছে।
গম্বো

@ গম্বো: কোনও বিওএমের অভাবের অর্থ এই নয় যে এটি একটি আলাদা এনকোডিং। এখানে দুটি মাত্র এনকোডিং রয়েছে।
মাকিং হাঁস

উপরের ব্লগটি স্ট্যাককভারফ্লোয়ের সিইও লিখেছেন।
শৈলেশ প্রতাপওয়ার

23

বিদ্যমান উত্তরগুলি ইতিমধ্যে প্রচুর বিশদ ব্যাখ্যা করে তবে এখানে সর্বাধিক প্রত্যক্ষ ব্যাখ্যা এবং উদাহরণ সহ একটি খুব সংক্ষিপ্ত উত্তর।

ইউনিকোড এমন একটি মান যা কোডারপয়েন্টগুলিতে অক্ষরগুলি মানচিত্র করে।
প্রতিটি চরিত্রের একটি অনন্য কোডপয়েন্ট (শনাক্তকরণ নম্বর) থাকে, যা 9731 এর মতো একটি নম্বর।

হল UTF-8 একটি হল এনকোডিং codepoints করুন।
সমস্ত অক্ষর ডিস্কে (কোনও ফাইলে) সংরক্ষণ করার জন্য, ইউটিএফ -8 অক্ষরগুলি 4 টি অক্টেট (8-বিট সিকোয়েন্স) - বাইটগুলিতে বিভক্ত করে। ইউটিএফ -8 হ'ল কয়েকটি এনকোডিংগুলির মধ্যে একটি (উপাত্ত উপস্থাপনের পদ্ধতি)। উদাহরণস্বরূপ, ইউনিকোডে, (দশমিক) কোডপয়েন্ট 9731 একটি স্নোম্যান ( ) উপস্থাপন করে, যা ইউটিএফ -8 এ 3 বাইট নিয়ে গঠিত:E2 98 83

এখানে কিছু এলোমেলো উদাহরণ সহ বাছাই করা তালিকা


1
না! ইউটিএফ -8 ইউনিকোড অক্ষরগুলিকে এনকোড করার একটি দুর্দান্ত উপায় তবে আমরা ইউটিএফ -16 বা ইউটিএফ -32 এও এনকোড করতে পারি। ইউটিএফ -32 এর সাথে আমাদের ডিডাব্লর্ড এবং কোডপয়েন্টের মধ্যে 1: 1 সম্পর্ক রয়েছে, ইউটিএফ -16 এর সাথে আমাদের বিআরড এবং কোডপয়েন্টের মধ্যে 1: 1 সম্পর্ক রয়েছে কেবলমাত্র বিএমপি-র কোডপয়েন্টের জন্য, সারোগেটস এবং বিওএমগুলি বাদ দিয়ে। ইউটিএফ -8 এ কেবল কোডপয়েন্টের জন্য আমাদের বাইট এবং কোডপয়েন্টের মধ্যে 1: 1 সম্পর্ক রয়েছে <127.
উজ্জ্বল

5
@ ব্রাইট: ঠিক, তবে "না!" কেন? আমি লিখেছি "ইউটিএফ -8 বেশ কয়েকটি এনকোডিংগুলির মধ্যে একটি" কারণ সেখানে ইউটিএফ -16 এবং ইউটিএফ -32 রয়েছে।
বেসিক 6

16

1. ইউনিকোড

"$, &, H, a, t,?, 张, 1, =, + ..." এর মতো বিশ্বজুড়ে প্রচুর অক্ষর রয়েছে।

তারপরে একটি সংস্থা আসে যারা এই চরিত্রগুলিতে নিবেদিত,

তারা "ইউনিকোড" নামে একটি স্ট্যান্ডার্ড তৈরি করেছিল।

মানটি নিম্নরূপ:

  • এমন একটি ফর্ম তৈরি করুন যাতে প্রতিটি অবস্থানকে "কোড পয়েন্ট" বা "কোড অবস্থান" বলা হয়।
  • পুরো অবস্থানগুলি U +0000 থেকে U + 10FFFF পর্যন্ত;
  • এখন অবধি, কিছু অবস্থান অক্ষর দ্বারা ভরাট, এবং অন্যান্য অবস্থানগুলি সংরক্ষণ বা খালি রয়েছে।
  • উদাহরণস্বরূপ, "U + 0024" অবস্থানটি "$" অক্ষর দিয়ে পূর্ণ।

পিএস: অবশ্যই আইএসও নামে আরও একটি সংস্থা রয়েছে যা অন্য একটি মান রক্ষণাবেক্ষণ করে - "আইএসও 10646" - প্রায় একই।

2. ইউটিএফ -8

উপরে হিসাবে, ইউ + 0024 কেবলমাত্র একটি অবস্থান, সুতরাং আমরা "U" অক্ষরের জন্য কম্পিউটারে "U + 0024" সংরক্ষণ করতে পারি না।

একটি এনকোডিং পদ্ধতি অবশ্যই থাকতে হবে।

তারপরে এনকোডিং পদ্ধতিগুলি আসে যেমন ইউটিএফ -8, ইউটিএফ -16, ইউটিএফ -32, ইউসিএস -2 ....

ইউটিএফ -8 এর অধীনে, কোড পয়েন্ট "ইউ + 0024" 00100100 এ এনকোড করা হয়েছে।

00100100 হ'ল কম্পিউটারে "for" এর জন্য সংরক্ষণ করা মান।


1
সাধারণভাবে, ইউটিএফ -8 হ'ল আজ কেবলমাত্র বৈকল্পিক uses
রিক জেমস

2
আইএসও 10646 ইউনিকোড অক্ষর সেটটির জন্য একটি অভিন্ন স্ট্যান্ডার্ড। ইউনিকোড অক্ষর সেট ব্যতীত অনেকগুলি বিষয় সংজ্ঞায়িত করে, যেমন বাছাইয়ের নিয়ম, কেস ইত্যাদি ISO আইএসও 10646 কেবলমাত্র অক্ষর সেট (যার মধ্যে বর্তমানে 130,000 এরও বেশি রয়েছে)। ইউনিকোড কনসোর্টিয়াম এবং আইএসও ইউনিকোডকে যৌথভাবে বিকাশ করে, কেবল অক্ষর সেট এবং এর এনকোডিংগুলির সাথে সম্পর্কিত আইএসও এবং ইউনিকোড এছাড়াও পাঠ্য প্রক্রিয়াকরণের জন্য চরিত্রের বৈশিষ্ট্য এবং নিয়মগুলি সংজ্ঞায়িত করে।
থোমাসরুটটার

12

আমি গম্বোর উত্তরের লিঙ্কগুলি পরীক্ষা করে দেখেছি এবং স্ট্যাক ওভারফ্লোতেও উপস্থিত থাকার জন্য আমি এখানে things জিনিসগুলির কিছু অংশ পেস্ট করতে চেয়েছিলাম।

"... কিছু লোক এই ভ্রান্ত ধারণার মধ্যে রয়েছে যে ইউনিকোড কেবল একটি 16-বিট কোড যেখানে প্রতিটি অক্ষর 16 বিট নেয় এবং তাই 65,536 সম্ভাব্য অক্ষর রয়েছে This এটি আসলে সঠিক নয় Un এটি ইউনিকোড সম্পর্কে একক প্রচলিত রূপকথা is সুতরাং, যদি আপনি এটি ভেবে থাকেন তবে খারাপ লাগবেন না।

প্রকৃতপক্ষে, ইউনিকোডের চরিত্রগুলি সম্পর্কে চিন্তাভাবনার একটি পৃথক পদ্ধতি রয়েছে এবং আপনাকে ইউনিকোডের জিনিসগুলি চিন্তা করার পদ্ধতিটি বুঝতে হবে বা কিছুই বোঝা যাবে না।

এখন অবধি, আমরা ধরে নিয়েছি যে চিঠিটি কিছু বিটকে ম্যাপ করে যা আপনি ডিস্কে বা স্মৃতিতে সঞ্চয় করতে পারেন:

এ -> 0100 0001

ইউনিকোডে কোনও চিঠির মানচিত্রকে কোড পয়েন্ট বলা হয় যা এখনও একটি তাত্ত্বিক ধারণা। সেই কোড পয়েন্টটি মেমোরিতে বা ডিস্কে কীভাবে উপস্থাপিত হয় তা সম্পূর্ণ অন্য গল্প ... "

"... প্রতিটি বর্ণমালার প্রতিটি প্লাটোনিক অক্ষর ইউনিকোড কনসোর্টিয়াম দ্বারা একটি ম্যাজিক নম্বর নির্ধারিত হয় যা এইভাবে লেখা হয়: ইউ + 0639 This এই যাদু নম্বরটি একটি কোড পয়েন্ট বলে। U + 0639 আরবি হ'ল আইন আইন। ইংরেজী বর্ণ A হবে U + 0041 .... "

"... ঠিক আছে, সুতরাং আমাদের একটি স্ট্রিং আছে বলুন:

হ্যালো

যা ইউনিকোডে এই পাঁচটি কোড পয়েন্টের সাথে মিলে যায়:

U + 0048 U + 0065 U + 006C U + 006C U + 006F।

কোড পয়েন্টের একটি গুচ্ছ মাত্র। সংখ্যা, সত্যিই। এটিকে স্মৃতিতে কীভাবে সংরক্ষণ করা যায় বা ইমেল বার্তায় এটি উপস্থাপন করা যায় সে সম্পর্কে আমরা এখনও কিছু বলিনি ... "

"... এদিকেই এনকোডিংগুলি আসে।

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

48 48 00 65 00 6C 00 6C 00 6F

রাইট? এত দ্রুত নয়! এটিও হতে পারে না:

48 00 65 00 6C 00 6C 00 6F 00? ... "


এএসসিআইআই-তে, কেবল একটি ইউনিকোডে নয়, একটি কোডও একটি কোডপয়েন্টে ম্যাপ করে।
উজ্জ্বল

8

ইউটিএফ -8 ইউনিকোড পাঠ্যের জন্য একটি সম্ভাব্য এনকোডিং স্কিম ।

ইউনিকোড একটি বিস্তৃত আকারযুক্ত মান যা 130,000 টিরও বেশি অক্ষরের সংজ্ঞা দেয় এবং প্রত্যেককে একটি সংখ্যাসূচক কোড (একটি কোড পয়েন্ট) বরাদ্দ করে। এটি এই পাঠ্যটিকে কীভাবে বাছাই করতে হবে, এটিকে সাধারণকরণ করতে হবে, এর কেস পরিবর্তন করতে হবে এবং আরও কীভাবে নিয়মকানুন সংজ্ঞায়িত করে। ইউনিকোডের একটি অক্ষর শূন্য থেকে 0x10FFFF সহ একটি কোড পয়েন্ট দ্বারা প্রতিনিধিত্ব করা হয়, যদিও কিছু কোড পয়েন্ট সংরক্ষিত থাকে এবং অক্ষরের জন্য ব্যবহার করা যায় না।

একাধিক উপায় রয়েছে যে ইউনিকোড কোড পয়েন্টগুলির একটি স্ট্রিং বাইনারি স্ট্রিমে এনকোড করা যায়। এগুলিকে "এনকোডিংস" বলা হয়। সর্বাধিক সরল এনকোডিংটি ইউটিএফ -32 , যা প্রতিটি কোড পয়েন্টকে 32-বিট পূর্ণসংখ্যার হিসাবে সহজভাবে সংরক্ষণ করে, যার প্রতিটি 4 বাইট প্রশস্ত থাকে।

হল UTF-8 হ'ল অন্য একটি এনকোডিং, এবং ইউটিএফ -32 এবং অন্যদের থেকে বেশ কয়েকটি সুবিধার কারণে এটি ডি-ফ্যাক্টো স্ট্যান্ডার্ডে পরিণত হচ্ছে। ইউটিএফ -8 এনকোডগুলি একক বাইট মানগুলির ক্রম হিসাবে। প্রতিটি কোড পয়েন্ট এই বাইট মানগুলির একটি পরিবর্তনশীল নম্বর ব্যবহার করতে পারে। ASCII সীমার কোড পয়েন্টগুলি এএসসিআইআইয়ের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য খালি এনকোড করা হয়েছে। এই ব্যাপ্তির বাইরের কোড পয়েন্টগুলি 2, 3, বা 4 হয় তারা কোন পরিসরে রয়েছে তার উপর নির্ভর করে বর্ধনের একটি চলক সংখ্যা ব্যবহার করে।

ইউটিএফ -8 এই বৈশিষ্ট্যগুলি মাথায় রেখে তৈরি করা হয়েছে:

  • ASCII অক্ষরগুলি ASCII তে ঠিক তেমন এনকোড করা থাকে, যেমন একটি ASCII স্ট্রিংটিও একটি বৈধ UTF-8 স্ট্রিং।

  • বাইনারি বাছাই: একটি নিখুঁত বাইনারি সাজানোর সাহায্যে ইউটিএফ -8 স্ট্রিং বাছাই করা এখনও সমস্ত কোড পয়েন্টকে সাংখ্যিক ক্রম অনুসারে বাছাই করবে।

  • একাধিক বাইটের জন্য প্রয়োজনীয় অক্ষরগুলি ASCII পরিসরে কোনও বাইট মান ধারণ করে না, তাদের কিছু অংশ ASCII অক্ষরের জন্য ভুল হতে পারে না তা নিশ্চিত করে। এটি একটি সুরক্ষা বৈশিষ্ট্য।

  • ইউটিএফ -8 সহজেই বৈধ হতে পারে, এবং কোনও বৈধকরণকারী দ্বারা অন্যান্য অক্ষর এনকোডিং থেকে পৃথক হতে পারে। অন্যান্য 8-বিট বা মাল্টি-বাইট এনকোডিংগুলিতে পাঠ্য খুব কমই ইউটিএফ -8 হিসাবে বৈধতা পাবে।

  • এলোমেলো অ্যাক্সেস: ইউটিএফ -8 স্ট্রিংয়ের যে কোনও পর্যায়ে এটি বলা সম্ভব যে position অবস্থানে থাকা বাইটটি কোনও চরিত্রের প্রথম বাইট কিনা এবং সামনের স্ক্যান করার প্রয়োজন ছাড়াই পরবর্তী বা বর্তমান চরিত্রের শুরুটি সন্ধান করতে পারে? বা পিছনে কয়েক বাইটের বেশি বা স্ট্রিমের শুরুতে কিছু পড়ুন।


ছোটখাট পয়েন্ট একটি দম্পতি: [1] করা উচিত নয় "ASCII অক্ষর ঠিক এনকোডেড থাকে তারা রয়েছে হওয়া ASCII " পরিবর্তন করা "ASCII অক্ষর এনকোডেড থাকে ঠিক হিসাবে তারা হয় হল UTF-8 " ? [2] "ইউনিকোডে কোডগুলি ..." বাক্যাংশটি আমার কাছে অস্পষ্ট। আপনার মানে কি "ইউনিকোড কোড পয়েন্ট ..." ?
স্কোমিসা

পয়েন্ট 1 এর জন্য এসকোমিসা, আমি বোঝাতে চাইছি ASCII সীমার মধ্যে বর্ণগুলির এনকোডিং ASCII এবং UTF-8 এর জন্য একরকম।
থোমাসরুটটার

দ্বিতীয় পয়েন্টের জন্য, এটি একটি সুস্পষ্ট বিন্দু এবং আমি এটিকে আরও পরিষ্কার করার জন্য এডিট করব
থোমাসরুতার

2

তারা একই জিনিস, তাই না?

না, তারা না।


আমি মনে করি আপনার উল্লিখিত উইকিপিডিয়া পৃষ্ঠার প্রথম বাক্যটি একটি দুর্দান্ত, সংক্ষিপ্তসারটি দেবে:

ইউটিএফ -8 একটি পরিবর্তনশীল প্রস্থের অক্ষর এনকোডিং যা ইউনিকোডে এক থেকে চার 8 বিট বাইট ব্যবহার করে সমস্ত 1,112,064 বৈধ কোড পয়েন্টকে এনকোডিং করতে সক্ষম।

সম্প্রসারিত:

  • ইউনিকোড একটি মান, যা বর্ণগুলি থেকে সংখ্যার, তথাকথিত কোড পয়েন্টগুলি (নীচের উদাহরণের মতো) হিসাবে মানচিত্র সংজ্ঞায়িত করে । সম্পূর্ণ ম্যাপিংয়ের জন্য, আপনি এখানে একবার দেখতে পারেন ।

    ! -> U+0021 (21),  
    " -> U+0022 (22),  
    \# -> U+0023 (23)
    
  • ইউটিএফ -8 হ'ল এই কোড পয়েন্টগুলিকে এমন কোনও পদ্ধতিতে এনকোড করার একটি উপায় যা কোনও কম্পিউটার বুঝতে পারে, ওরফে বিটগুলি বুঝতে পারে । অন্য কথায়, এই কোড পয়েন্টগুলির প্রত্যেককে বিটের ক্রমে রূপান্তর করতে বা বিটের ক্রমকে সমমানের কোড পয়েন্টগুলিতে রূপান্তর করার একটি উপায় / অ্যালগরিদম। নোট করুন যে ইউনিকোডের জন্য প্রচুর বিকল্প এনকোডিং রয়েছে।


জোয়েল এখানে একটি দুর্দান্ত ব্যাখ্যা এবং ইতিহাসের একটি সংক্ষিপ্ত বিবরণ দেয় ।


2

আমি যদি এই থ্রেড থেকে কী সংগ্রহ করেছি তার সংক্ষিপ্ত বিবরণ দিতে পারি:

ইউনিকোড অক্ষরগুলিকে অর্ডিনাল সংখ্যায় (দশমিক আকারে) 'অনুবাদ' করে ।

à = 224

ইউটিএফ -8 হ'ল একটি এনকোডিং যা এই সংখ্যাগুলিকে বাইনারি উপস্থাপনায় 'অনুবাদ' করে

224 = 11000011 10100000

নোট করুন যে আমরা 224 এর বাইনারি উপস্থাপনার কথা বলছি , এর বাইনারি ফর্মটি নয়, যা 0b11100000।


2

এই নিবন্ধটি সমস্ত বিবরণ ব্যাখ্যা করে: http://kunststube.net/encoding/

বুফার লিখন

আপনি যদি কোনও 4 বাইট বাফার লিখেছেন, ইউটিএফ 8 এনকোডিং সহ প্রতীক , আপনার বাইনারিটি দেখতে এইরকম হবে:

00000000 11100011 10000001 10000010

আপনি যদি একটি 4 বাইট বাফার লিখেছেন, ইউটিএফ 16 এঙ্কোডিং সহ প্রতীক , আপনার বাইনারিটি দেখতে এইরকম হবে:

00000000 00000000 00110000 01000010

আপনি দেখতে পাচ্ছেন, আপনার সামগ্রীতে আপনি কোন ভাষা ব্যবহার করবেন তার উপর নির্ভর করে এটি সেই অনুসারে আপনার স্মৃতিতে প্রভাব ফেলবে।

উদাহরণস্বরূপ এই নির্দিষ্ট প্রতীকটির জন্য: ইউটিএফ 16 এনকোডিং আরও কার্যকর কারণ যেহেতু পরবর্তী প্রতীকটির জন্য আমাদের কাছে অতিরিক্ত 2 বাইট রয়েছে। তবে এর অর্থ এই নয় যে আপনাকে অবশ্যই জাপানের বর্ণমালার জন্য ইউটিএফ 16 ব্যবহার করতে হবে।

বুফার থেকে পড়া

এখন আপনি যদি উপরের বাইটগুলি পড়তে চান তবে আপনাকে জানতে হবে এটি কোন এনকোডিংয়ে লিখিত ছিল এবং এটিকে সঠিকভাবে ডিকোড করতে হবে।

উদাহরণস্বরূপ, আপনি যদি এটি ডিকোড করেন: 00000000 11100011 10000001 10000010 ইউটিএফ 16 এনকোডিংয়ে, আপনি না দিয়ে শেষ করবেন

দ্রষ্টব্য: এনকোডিং এবং ইউনিকোড দুটি আলাদা জিনিস। ইউনিকোড হ'ল বড় (টেবিল) প্রতিটি প্রতীককে একটি অনন্য কোড পয়েন্টে ম্যাপ করা হয়। যেমন প্রতীক (বর্ণ) এর একটি (কোড পয়েন্ট) রয়েছে : 30 42 (হেক্স)। অন্যদিকে এনকোডিং হ'ল একটি অ্যালগরিদম যা প্রতীককে আরও উপযুক্ত উপায়ে রূপান্তর করে, যখন হার্ডওয়ারে স্টোর করা হয়।

30 42 (hex) - > UTF8 encoding - > E3 81 82 (hex), which is above result in binary.

30 42 (hex) - > UTF16 encoding - > 30 42 (hex), which is above result in binary.

এখানে চিত্র বর্ণনা লিখুন


খুব ভাল লিঙ্কযুক্ত নিবন্ধ, আশা করি এটি সক্রিয় থাকবে
yolob 21

0

ইউটিএফ -8 ইউনিকোড অক্ষরগুলিকে 8-বিট সিকোয়েন্সগুলি ব্যবহার করে এনকোড করার জন্য একটি পদ্ধতি।

ইউনিকোড হ'ল বহু ভাষা থেকে বর্ণের বিভিন্ন ধরণের প্রতিনিধিত্ব করার জন্য একটি মান।


4
"8-বিট ক্রম"…? এটি আরও নিখুঁতভাবে নির্দিষ্ট করতে পারে…
ছদ্মবেশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.