আমি মানুষের কাছ থেকে বিরোধী মতামত শুনেছি - উইকিপিডিয়া ইউটিএফ -8 পৃষ্ঠা অনুসারে।
তারা একই জিনিস, তাই না? কেউ কি স্পষ্ট করতে পারেন?
আমি মানুষের কাছ থেকে বিরোধী মতামত শুনেছি - উইকিপিডিয়া ইউটিএফ -8 পৃষ্ঠা অনুসারে।
তারা একই জিনিস, তাই না? কেউ কি স্পষ্ট করতে পারেন?
উত্তর:
অন্যরা যে উত্তর দিয়েছে সেগুলি সম্প্রসারণ করতে:
কম্পিউটারগুলি আদর্শভাবে প্রদর্শন করা উচিত এমন প্রচুর অক্ষর সহ আমরা প্রচুর ভাষা পেয়েছি। ইউনিকোড প্রতিটি অক্ষরকে একটি অনন্য নম্বর বা কোড পয়েন্ট বরাদ্দ করে।
কম্পিউটারগুলি বাইটের মতো সংখ্যার সাথে ডিল করে ... এখানে কিছুটা ইতিহাস এড়িয়ে যাওয়া এবং মেমরির সমাধানের বিষয়গুলি উপেক্ষা করে 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-তে মাল্টি-ইউনিট অক্ষরগুলির সাথে ডিল করার সম্ভাবনা কম।
আশা করি কিছু বিবরণ পূরণ করে।
0x04000000
করতে 0x7FFFFFFF
, বা বাইনারি মধ্যে এটা 1111110v 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv
- এবং প্রকৃতপক্ষে 6 বাইট। যাইহোক, 6 বাইট সর্বোচ্চ হয় , এবং নিবন্ধটি বিভ্রান্তিকরভাবে "ছয় বাইট বা তার বেশি " দাবি করে না ।
এই বিষয়টি চিত্রিত করার জন্য আমাকে একটি উদাহরণ ব্যবহার করুন:
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
পিএস আপনি অজগর এই বিষয় শিখতে চান, এখানে ক্লিক করুন
0
তবে অক্ষরটি 1 টি দংশন (বর্তমানের) দ্বারা উপস্থাপিত হয়, যদি বাইট শুরু হয় 110
তবে অক্ষরটি 2 বাইট দ্বারা উপস্থাপিত হয় (বর্তমান এবং পরবর্তী একটি ( বাকী বিট পরে 10
)), বাইট শুরু 1110
হলে অক্ষরটি 3 বাইট, বর্তমান এবং পরবর্তী 2 বাইট (পরে বিট পরে 10
) দ্বারা উপস্থাপিত হয়
দুর্ভাগ্যক্রমে "ইউনিকোড" প্রসঙ্গের উপর নির্ভর করে বিভিন্নভাবে ব্যবহৃত হয়। এর সর্বাধিক সঠিক ব্যবহার (আইএমও) কোডেড অক্ষর সেট হিসাবে হ'ল - অর্থাত্ অক্ষরের একটি সেট এবং অক্ষর এবং পূর্ণসংখ্যা কোড পয়েন্টগুলির মধ্যে একটি ম্যাপিং যা তাদের উপস্থাপন করে।
ইউটিএফ -8 হ'ল একটি অক্ষর এনকোডিং - বাইটের ক্রম থেকে অক্ষরের অনুক্রম এবং তার বিপরীতে রূপান্তর করার একটি উপায়। এটি পুরো ইউনিকোড চরিত্রের সেটটি জুড়েছে। ASCII অক্ষর অনুযায়ী একক বাইট হিসাবে এনকোড করা হয়েছে এবং অন্যান্য অক্ষরগুলি তাদের সঠিক কোড পয়েন্টের ভিত্তিতে আরও বাইট নেয় (বর্তমানে সংজ্ঞায়িত সমস্ত কোড পয়েন্টের জন্য 4 বাইট পর্যন্ত, যেমন U-0010FFF পর্যন্ত, এবং প্রকৃতপক্ষে 4 বাইট পর্যন্ত সামলাতে পারে ইউ-001FFFFF)।
"ইউনিকোড" যখন কোনও অক্ষর এনকোডিংয়ের নাম হিসাবে ব্যবহৃত হয় (যেমন। নেট এনকোডিং U ইউনিকোড সম্পত্তি হিসাবে) এর সাধারণত সাধারণত ইউটিএফ -16 বোঝায় যা সাধারণত দুটি অক্ষর হিসাবে সাধারণ অক্ষরকে এনকোড করে। কিছু প্ল্যাটফর্ম (উল্লেখযোগ্যভাবে। নেট এবং জাভা) তাদের "নেটিভ" অক্ষর এনকোডিং হিসাবে ইউটিএফ -16 ব্যবহার করে। এটি চুলচেরা সমস্যার দিকে নিয়ে যায় যদি আপনার এমন একটি অক্ষর সম্পর্কে চিন্তা করতে হয় যা একটি একক ইউটিএফ -16 মান (তারা "সারোগেট জোড়া" হিসাবে এনকোডড থাকে) - তবে আইএমই সম্পর্কে কখনও চিন্তা করে না।
ইউনিকোডের কয়েকটি রেফারেন্স:
তারা একই জিনিস নয় - ইউটিএফ -8 ইউনিকোড এনকোডিংয়ের একটি বিশেষ উপায়।
আপনার অ্যাপ্লিকেশন এবং আপনি যে ডেটা ব্যবহার করতে চান তার উপর নির্ভর করে আপনি প্রচুর বিভিন্ন এনকোডিং বেছে নিতে পারেন। আমার জানা হিসাবে ইউটিএফ -8, ইউটিএফ -16 এবং ইউটিএফ -32 সর্বাধিক সাধারণ।
ইউনিকোড কেবল কোড পয়েন্টগুলি সংজ্ঞা দেয় , এটি এমন একটি সংখ্যা যা একটি চরিত্রকে উপস্থাপন করে। আপনি এই কোড পয়েন্টগুলিকে মেমরিতে কীভাবে সঞ্চয় করবেন তা নির্ভর করে আপনি যে এনকোডিংটি ব্যবহার করছেন তা নির্ভর করে। ইউটিএফ -8 হ'ল ইউনিকোড অক্ষরগুলি এনকোড করার একটি উপায়, অন্য অনেকের মধ্যে।
ইউনিকোড হল এমন একটি মান যা সংজ্ঞা দেয়, পাশাপাশি আইএসও / আইইসি 10646, ইউনিভার্সাল ক্যারেক্টার সেট (ইউসিএস) যা ব্যবহারিকভাবে সমস্ত জ্ঞাত ভাষার প্রতিনিধিত্ব করার জন্য প্রয়োজনীয় সমস্ত বিদ্যমান অক্ষরের একটি সুপারসেট।
ইউনিকোড তার পুস্তকের প্রতিটি অক্ষরকে একটি নাম এবং একটি সংখ্যা ( অক্ষর কোড , বা কোড-পয়েন্ট ) নির্ধারণ করে।
ইউটিএফ -8 এনকোডিং , কম্পিউটার মেমরিতে এই অক্ষরগুলি ডিজিটালি উপস্থাপন করার একটি উপায়। ইউটিএফ -8 প্রতিটি কোড-পয়েন্টকে অক্টেটের ক্রম (8-বিট বাইট) ম্যাপ করে
যেমন,
ইউসিএস চরিত্র = ইউনিকোড হ্যান চরিত্র
ইউসিএস কোড-পয়েন্ট = ইউ + 24 বি 62
ইউটিএফ -8 এনকোডিং = এফ 0 এ 4 এডি এ 2 (হেক্স) = 11110000 10100100 10101101 10100010 (বিন)
http://www.wikiwand.com/en/UTF-8#/Description
প্রথম সারিতে একবার দেখুন।
ইউনিকোড কেবলমাত্র একটি মান যা এই অক্ষর সেটটি এনকোড করতে একটি অক্ষর সেট ( ইউসিএস ) এবং এনকোডিংস ( ইউটিএফ ) সংজ্ঞায়িত করে । তবে সাধারণভাবে, ইউনিকোডের মানটি নয় বরং চরিত্রের সেটে রেফার করা হয়।
নিখুঁত ন্যূনতম প্রতিটি সফ্টওয়্যার বিকাশকারী পড়ুন , ইতিবাচকভাবে অবশ্যই ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে জানতে হবে (কোনও অজুহাত!) এবং 5 মিনিটে ইউনিকোড ।
বিদ্যমান উত্তরগুলি ইতিমধ্যে প্রচুর বিশদ ব্যাখ্যা করে তবে এখানে সর্বাধিক প্রত্যক্ষ ব্যাখ্যা এবং উদাহরণ সহ একটি খুব সংক্ষিপ্ত উত্তর।
ইউনিকোড এমন একটি মান যা কোডারপয়েন্টগুলিতে অক্ষরগুলি মানচিত্র করে।
প্রতিটি চরিত্রের একটি অনন্য কোডপয়েন্ট (শনাক্তকরণ নম্বর) থাকে, যা 9731 এর মতো একটি নম্বর।
হল UTF-8 একটি হল এনকোডিং codepoints করুন।
সমস্ত অক্ষর ডিস্কে (কোনও ফাইলে) সংরক্ষণ করার জন্য, ইউটিএফ -8 অক্ষরগুলি 4 টি অক্টেট (8-বিট সিকোয়েন্স) - বাইটগুলিতে বিভক্ত করে। ইউটিএফ -8 হ'ল কয়েকটি এনকোডিংগুলির মধ্যে একটি (উপাত্ত উপস্থাপনের পদ্ধতি)। উদাহরণস্বরূপ, ইউনিকোডে, (দশমিক) কোডপয়েন্ট 9731 একটি স্নোম্যান ( ☃
) উপস্থাপন করে, যা ইউটিএফ -8 এ 3 বাইট নিয়ে গঠিত:E2 98 83
"$, &, H, a, t,?, 张, 1, =, + ..." এর মতো বিশ্বজুড়ে প্রচুর অক্ষর রয়েছে।
তারপরে একটি সংস্থা আসে যারা এই চরিত্রগুলিতে নিবেদিত,
তারা "ইউনিকোড" নামে একটি স্ট্যান্ডার্ড তৈরি করেছিল।
মানটি নিম্নরূপ:
পিএস: অবশ্যই আইএসও নামে আরও একটি সংস্থা রয়েছে যা অন্য একটি মান রক্ষণাবেক্ষণ করে - "আইএসও 10646" - প্রায় একই।
উপরে হিসাবে, ইউ + 0024 কেবলমাত্র একটি অবস্থান, সুতরাং আমরা "U" অক্ষরের জন্য কম্পিউটারে "U + 0024" সংরক্ষণ করতে পারি না।
একটি এনকোডিং পদ্ধতি অবশ্যই থাকতে হবে।
তারপরে এনকোডিং পদ্ধতিগুলি আসে যেমন ইউটিএফ -8, ইউটিএফ -16, ইউটিএফ -32, ইউসিএস -2 ....
ইউটিএফ -8 এর অধীনে, কোড পয়েন্ট "ইউ + 0024" 00100100 এ এনকোড করা হয়েছে।
00100100 হ'ল কম্পিউটারে "for" এর জন্য সংরক্ষণ করা মান।
আমি গম্বোর উত্তরের লিঙ্কগুলি পরীক্ষা করে দেখেছি এবং স্ট্যাক ওভারফ্লোতেও উপস্থিত থাকার জন্য আমি এখানে 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 ইউনিকোড পাঠ্যের জন্য একটি সম্ভাব্য এনকোডিং স্কিম ।
ইউনিকোড একটি বিস্তৃত আকারযুক্ত মান যা 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 অবস্থানে থাকা বাইটটি কোনও চরিত্রের প্রথম বাইট কিনা এবং সামনের স্ক্যান করার প্রয়োজন ছাড়াই পরবর্তী বা বর্তমান চরিত্রের শুরুটি সন্ধান করতে পারে? বা পিছনে কয়েক বাইটের বেশি বা স্ট্রিমের শুরুতে কিছু পড়ুন।
তারা একই জিনিস, তাই না?
না, তারা না।
আমি মনে করি আপনার উল্লিখিত উইকিপিডিয়া পৃষ্ঠার প্রথম বাক্যটি একটি দুর্দান্ত, সংক্ষিপ্তসারটি দেবে:
ইউটিএফ -8 একটি পরিবর্তনশীল প্রস্থের অক্ষর এনকোডিং যা ইউনিকোডে এক থেকে চার 8 বিট বাইট ব্যবহার করে সমস্ত 1,112,064 বৈধ কোড পয়েন্টকে এনকোডিং করতে সক্ষম।
সম্প্রসারিত:
ইউনিকোড একটি মান, যা বর্ণগুলি থেকে সংখ্যার, তথাকথিত কোড পয়েন্টগুলি (নীচের উদাহরণের মতো) হিসাবে মানচিত্র সংজ্ঞায়িত করে । সম্পূর্ণ ম্যাপিংয়ের জন্য, আপনি এখানে একবার দেখতে পারেন ।
! -> U+0021 (21),
" -> U+0022 (22),
\# -> U+0023 (23)
ইউটিএফ -8 হ'ল এই কোড পয়েন্টগুলিকে এমন কোনও পদ্ধতিতে এনকোড করার একটি উপায় যা কোনও কম্পিউটার বুঝতে পারে, ওরফে বিটগুলি বুঝতে পারে । অন্য কথায়, এই কোড পয়েন্টগুলির প্রত্যেককে বিটের ক্রমে রূপান্তর করতে বা বিটের ক্রমকে সমমানের কোড পয়েন্টগুলিতে রূপান্তর করার একটি উপায় / অ্যালগরিদম। নোট করুন যে ইউনিকোডের জন্য প্রচুর বিকল্প এনকোডিং রয়েছে।
জোয়েল এখানে একটি দুর্দান্ত ব্যাখ্যা এবং ইতিহাসের একটি সংক্ষিপ্ত বিবরণ দেয় ।
আমি যদি এই থ্রেড থেকে কী সংগ্রহ করেছি তার সংক্ষিপ্ত বিবরণ দিতে পারি:
ইউনিকোড অক্ষরগুলিকে অর্ডিনাল সংখ্যায় (দশমিক আকারে) 'অনুবাদ' করে ।
à = 224
ইউটিএফ -8 হ'ল একটি এনকোডিং যা এই সংখ্যাগুলিকে বাইনারি উপস্থাপনায় 'অনুবাদ' করে ।
224 = 11000011 10100000
নোট করুন যে আমরা 224 এর বাইনারি উপস্থাপনার কথা বলছি , এর বাইনারি ফর্মটি নয়, যা 0b11100000।
এই নিবন্ধটি সমস্ত বিবরণ ব্যাখ্যা করে: 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.