UTF-8, UTF-16, এবং UTF-32


486

ইউটিএফ -8, ইউটিএফ -16, এবং ইউটিএফ -32 এর মধ্যে পার্থক্য কী?

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


36
যদি আপনি আপনি কতটা আগ্রহী এই ভিডিওটি দেখুন ইউনিকোড কাজ করে youtube.com/watch?v=MijmeoH9LT4

1
ভিডিওটি ইউটিএফ -8-তে ফোকাস করেছে, এবং হ্যাঁ এটি কীভাবে পরিবর্তনশীল দৈর্ঘ্যের এনকোডিংয়ের কাজ করে তা বেশিরভাগ ক্ষেত্রে সুসংগত এবং কেবলমাত্র নির্দিষ্ট দৈর্ঘ্য এএসসিআই কম্পিউটার পড়তে বা লেখার সাথে সামঞ্জস্যপূর্ণ। ইউটিএফ -8 এনকোডিং ডিজাইন করার সময় ইউনিকোড ছেলেরা স্মার্ট ছিল।
মিনিট

1
রূপান্তর এবং তুলনার জন্য আমি একটি অনলাইন সরঞ্জাম তৈরি করেছি ।
অমিত কুমার গুপ্ত

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

@ ভ্লাদিস্লাভ টনচারভ ইউটিএফ -16 কখনও স্থির দৈর্ঘ্যের এনকোডিং ছিল না। আপনি এটি ইউসিএস -২ এর সাথে বিভ্রান্ত করছেন।

উত্তর:


373

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

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

UTF-32 4 টি বাইটে সমস্ত সম্ভাব্য অক্ষর কভার করবে। এটি একেবারে ফুলে যায়। আমি এটি ব্যবহার করে কোনও লাভের কথা ভাবতে পারি না।


165
ইউটিএফ -32 সুবিধা: আপনার অক্ষর হ্যান্ডলিং দ্বারা অক্ষর হিসাবে উদাহরণস্বরূপ 32-বিট ইউনিকোড কোড পয়েন্টে সঞ্চিত ডেটা ডিকোড করার দরকার নেই। কোড পয়েন্টটি ইতিমধ্যে আপনার অ্যারে / ভেক্টর / স্ট্রিংয়ে উপলব্ধ।
richq

22
পার্স করা আরও সহজ (যদি স্বর্গ আপনাকে সহায়তা করে) আপনাকে চক্রটি পুনরায় প্রয়োগ করতে হবে।
পল ম্যাকমিলান

24
ওয়েল, ইউটিএফ -8 এর নেটওয়ার্ক স্থানান্তরে একটি সুবিধা রয়েছে - আপনি একবারে ডেটা বাইট ডেটা স্থানান্তর করছেন (4 এর বিপরীতে) যেহেতু অন্তর্নিহিতা সম্পর্কে চিন্তা করার দরকার নেই।
টিম Čas

30
@ রিচক আপনি ইউটিএফ -32-এ চরিত্র অনুসারে চরিত্র পরিচালনা করতে পারবেন না, কারণ কোড পয়েন্ট সবসময় কোনও চরিত্রের সাথে মিলে না।
হ্যামস্টারজেন

4
ইউটিএফ -32 সুবিধা: স্ট্রিং ম্যানিপুলেশন সম্ভবত utf-8 সমতুলের তুলনায় দ্রুত
ওয়েস

331

সংক্ষেপে:

  • UTF-8: পরিবর্তনশীল-প্রস্থের এনকোডিং, ASCII এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ। ASCII টি অক্ষর (U +0000 থেকে U + 007F) 1 বাইট নেয়, কোড পয়েন্ট U + 0080 থেকে U + 07FF 2 বাইট নেয়, কোড পয়েন্ট U + 0800 থেকে U + FFFF লাগে 3 বাইট, কোড পয়েন্ট U + 10000 থেকে U + 10FFF 4 বাইট নিন ইংরেজি পাঠ্যের জন্য ভাল, এশীয় পাঠ্যের পক্ষে তেমন ভাল নয়।
  • UTF-16: পরিবর্তনশীল-প্রস্থের এনকোডিং। কোড পয়েন্টগুলি ইউ +0000 থেকে ইউ + এফএফএফএফ 2 বাইট, কোড পয়েন্ট U + 10000 থেকে U + 10FFFF 4 বাইট নেয়। ইংরেজি পাঠ্যের পক্ষে খারাপ, এশীয় পাঠ্যের পক্ষে ভাল।
  • ইউটিএফ -32: স্থির-প্রস্থের এনকোডিং। সমস্ত কোড পয়েন্ট চার বাইট লাগে। একটি প্রচুর মেমরি হোগ, তবে এটি চালানোর জন্য দ্রুত। কদাচিৎ ব্যবহৃত.

দীর্ঘ সময়: উইকিপিডিয়া: ইউটিএফ -8 , ইউটিএফ -16 এবং ইউটিএফ -32 দেখুন


65
@ স্পাইরিমোস: আমি ডেটা বাইট দ্বারা নেওয়া স্থানের পরিমাণ সম্পর্কে কঠোরভাবে উল্লেখ করছি। ইউটিএফ -8 এশিয়ান চরিত্রের জন্য প্রতি 3 বাইট প্রয়োজন, যখন ইউটিএফ -16 এশিয়ান চরিত্রের জন্য কেবল 2 বাইট প্রয়োজন। এটি সত্যিই একটি বড় সমস্যা নয়, যেহেতু কম্পিউটারগুলির মধ্যে বর্তমানে কোনও প্রোগ্রামের স্মৃতিতে থাকা গড় পরিমাণ পাঠ্যের তুলনায় কম্পিউটারের প্রচুর স্মৃতি থাকে।
অ্যাডাম রোজেনফিল্ড

12
ইউটিএফ -32 খুব কমই আর ব্যবহার করা হয় না ... অসক্স এবং লিনাক্সে wchar_t4 বাইটের ডিফল্ট হয়। জিসিসির একটি বিকল্প রয়েছে -fshort-wcharযা আকারটি 2 বাইটে হ্রাস করে, তবে স্ট্যান্ড লিবসের সাথে বাইনারি সামঞ্জস্যতা ভেঙে দেয়।
দ্রাক্ষালতা

9
@ পান্ডাওড অফসোর্স ইউটিএফ -8 যে কোনও চরিত্রকে এনকোড করতে পারে! তবে আপনি কি ইউটিএফ -16 এর সাথে মেমরির প্রয়োজনীয়তার তুলনা করেছেন? আপনি পয়েন্ট মিস করছেন বলে মনে হচ্ছে!
উস্তামান সংগীত

16
যদি কেউ ইউটিএফ -8 বলতে ইউনিকোড এনকোড করতে পারে না এমন সমস্ত এনকোডিং ফর্ম্যাটগুলির প্রসঙ্গে "এশিয়ান পাঠ্যের পক্ষে এতটা ভাল না" হয় তবে তারা অবশ্যই ভুল হবে। তবে সেটি প্রসঙ্গ নয়। মেমরির প্রয়োজনীয়তার প্রসঙ্গটি এ থেকে আসে যে প্রশ্নটি (এবং উত্তর) ইউটিএফ -8, ইউটিএফ -16 এবং ইউটিএফ -32 এর সাথে তুলনা করছে, যা সমস্ত এশীয় পাঠ্যকে এনকোড করবে তবে বিভিন্ন পরিমাণে মেমরি / স্টোরেজ ব্যবহার করবে। এটি অনুসরণ করে যে তাদের আপেক্ষিক কল্যাণ স্বাভাবিকভাবেই সম্পূর্ণরূপে মেমরির প্রয়োজনীয়তার প্রসঙ্গে থাকবে। "এত ভাল না"! = "ভাল না"।
পল গ্রেগরি

5
@ এমসিগিটার: অবশ্যই আছে। আপনি যদি বিশ্বাসযোগ্যতা চান তবে সরাসরি ইউনিকোড কনসোর্টিয়ামের ঘোড়ার মুখে যান । ইউটিএফ- * এনকোডিংগুলির বিবরণের জন্য অধ্যায় 2.5 দেখুন। তবে এনকোডিংগুলির একটি সহজ, উচ্চ-স্তরের বোঝাপড়া পাওয়ার জন্য, আমি দেখতে পাচ্ছি যে উইকিপিডিয়া নিবন্ধগুলি আরও অনেক বেশি সহজলভ্য উত্স।
অ্যাডাম রোজেনফিল্ড

116
  • UTF-8 পরিবর্তনশীল 1 থেকে 4 বাইট।

  • UTF-16 পরিবর্তনশীল 2 বা 4 বাইট।

  • ইউটিএফ -32 4 বাইট স্থির করা হয়েছে ।

দ্রষ্টব্য: ইউটিএফ -8 সর্বশেষ কনভেনশন সহ 1 থেকে 6 বাইট নিতে পারে: https://lists.gnu.org/archive/html/help-flex/2005-01/msg00030.html


35
ইউটিএফ 8 আসলে 1 থেকে 6 বাইট হয়।
21k8 এ 17

6
@ উর্কলে প্রযুক্তিগতভাবে সঠিক কারণ ইউটিএফ 32 / এলই / বি এর সম্পূর্ণ পরিসীমা ম্যাপিংয়ে ইউ -00200000 - ইউ -7 এফএফএফএফএফএফএফ অন্তর্ভুক্ত রয়েছে যদিও ইউনিকোড ভি 6.3 ইউ -0010 এফএফএফএফ অন্তর্ভুক্তিতে শেষ হয়। এখানে কীভাবে এনক / ডিসেম্বর 5 এবং 6 বাইট ইউটিএফ 8 করা যায় তার একটি সুন্দর ব্রেকডাউন রয়েছে: list.gnu.org/archive/html/help-flex/2005-01/msg00030.html

4
প্রাসঙ্গিক রেফারেন্স অংশ এবং তাদের উত্স সঙ্গে এই ব্যাক আপ?
n611x007

20
@ আরক্লে নং, ইউটিএফ -8 5 বা 6 বাইট হতে পারে না। ইউনিকোড কোড পয়েন্টগুলি 21 বিটের মধ্যে সীমাবদ্ধ যা ইউটিএফ -8 থেকে 4 বাইট সীমাবদ্ধ করে। (আপনি অবশ্যই অবাধ বৃহৎ পূর্ণসংখ্যার সঙ্কেতাক্ষরে লিখা হল UTF-8 নীতিকে প্রসারিত পারে, কিন্তু এটা ইউনিকোড হবে না।) জন্য RFC দেখুন 3629.
RDB

11
উইকিপিডিয়াটির উদ্ধৃতি: ২০০৩ সালের নভেম্বরে, ইউটিএফ -১ character অক্ষরের এনকোডিংয়ের সীমাবদ্ধতার সাথে মেলে তুলতে আরএফসি ৩29২৯ দ্বারা সীমাবদ্ধ ছিল: উচ্চ এবং নিম্ন সরোগেট অক্ষরের সাথে সম্পর্কিত কোড পয়েন্টগুলি স্পষ্টভাবে নিষিদ্ধ করে তিন-বাইট অনুক্রমের 3% এরও বেশি সরানো হয়েছে , এবং ইউ + 10 এফএফএফএফ এ শেষ হয়ে চার-বাইট অনুক্রমের 48% এরও বেশি এবং সমস্ত পাঁচ- এবং ছয়-বাইট অনুক্রম সরিয়েছে।
অ্যাডাম ক্যালভেট বোহল

79

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

সংক্ষেপে, UTF-32 প্রতিটি অক্ষরের জন্য 32-বিট মান ব্যবহার করে। এটি তাদের প্রতিটি চরিত্রের জন্য একটি নির্দিষ্ট-প্রস্থের কোড ব্যবহার করতে দেয়।

ইউটিএফ -১ ডিফল্টরূপে ১--বিট ব্যবহার করে তবে এটি আপনাকে কেবল k৫ কে সম্ভাব্য অক্ষর দেয় যা পুরো ইউনিকোড সেটের জন্য পর্যাপ্ত কোথাও নেই। সুতরাং কিছু অক্ষর 16-বিট মানগুলির জোড়া ব্যবহার করে।

এবং ইউটিএফ -8 ডিফল্টভাবে 8-বিট মানগুলি ব্যবহার করে যার অর্থ হল 127 প্রথম মানগুলি স্থির-প্রস্থের একক-বাইট অক্ষর (সবচেয়ে উল্লেখযোগ্য বিটটি বোঝাতে ব্যবহৃত হয় যে এটি 7-এ রেখে একাধিক-বাইট অনুক্রমের শুরু) প্রকৃত চরিত্রের মানের জন্য বিট)। অন্যান্য সমস্ত অক্ষর 4 বাইট অবধি ক্রম হিসাবে এনকোড করা হয়েছে (যদি মেমোরিটি দেয় তবে)।

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

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

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

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

লিনাক্স কিছুটা পৃথক হয়, তবে তারা ইউনিকোড-আনুগত্যের জন্য সাধারণত ইউটিএফ -8 ব্যবহার করে।

সুতরাং সংক্ষিপ্ত উত্তর: তিনটি এনকোডিং একই অক্ষর সেটকে এনকোড করতে পারে তবে তারা প্রতিটি অক্ষরকে বিভিন্ন বাইট অনুক্রম হিসাবে উপস্থাপন করে।


12
ইউনিকোড প্রতিটি গ্রাফিকাল চিহ্নের জন্য একটি স্বতন্ত্র পূর্ণসংখ্যার নিয়োগ করে তা বলা সঠিক নয় । এটি প্রতিটি কোড পয়েন্টে যেমন বরাদ্দ করে তবে কিছু কোড পয়েন্ট হয় অদৃশ্য কন্ট্রোল ক্যারেক্টার এবং কিছু গ্রাফিকাল সিম্বলকে উপস্থাপনের জন্য একাধিক কোড পয়েন্টের প্রয়োজন হয়।
tchrist

15
@ ক্রিশ্চট: হ্যাঁ, এটি ভুল। সমস্যাটি হ'ল ইউনিকোডকে সঠিকভাবে ব্যাখ্যা করতে আপনার কয়েক হাজার পৃষ্ঠা লিখতে হবে। আমি এনকোডিংগুলির মধ্যে পার্থক্যটি ব্যাখ্যা করতে প্রাথমিক ধারণাটি পেয়ে যাব বলে আশাবাদী
জাল্ফ

@ জালফ ঠিক ঠিক তাই ইউনিকোডকে ব্যাখ্যা করতে আপনাকে ইউনিকোড কোর স্পেসিফিকেশন লিখতে হবে
জাস্টিন ওহমস

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

44

ইউনিকোড একটি স্ট্যান্ডার্ড এবং ইউটিএফ-এক্স সম্পর্কে আপনি কিছু ব্যবহারিক উদ্দেশ্যে প্রযুক্তিগত বাস্তবায়ন হিসাবে ভাবতে পারেন:

  • ইউটিএফ -8 - " আকারটি অনুকূলিতকরণ ": লাতিন অক্ষর ভিত্তিক ডেটা (বা এএসসিআইআই) এর জন্য সবচেয়ে উপযুক্ত, এটি প্রতি চরিত্রের জন্য কেবল 1 বাইট লাগে তবে আকারটি সেই অনুসারে প্রতীকের বিভিন্নতা বৃদ্ধি পায় (এবং সবচেয়ে খারাপ ক্ষেত্রে চরিত্রটি 6 বাইট পর্যন্ত বাড়তে পারে)
  • ইউটিএফ -১ - - " ভারসাম্য ": চরিত্রের জন্য ন্যূনতম ২ বাইট লাগবে যা মূলধারার ভাষাগুলির বিদ্যমান সেটগুলির জন্য যথেষ্ট পরিমাণে অক্ষর পরিচালনা পরিচালনা সহজ করে (তবে আকারটি এখনও পরিবর্তনশীল এবং অক্ষর প্রতি 4 বাইট পর্যন্ত বাড়তে পারে) )
  • হল UTF-32 - " পারফরম্যান্স ": স্থির আকারের অক্ষরের ফলস্বরূপ (4 বাইট) সাধারণ স্মৃতি অ্যালগরিদম ব্যবহারের অনুমতি দেয় তবে মেমরির অসুবিধা সহ

«মূলধারার ভাষাগুলি world বিশ্বের অনেক অংশে মূলধারার নয়
ux

2
ইউটিএফ -16 আসলে ASCII অক্ষরের জন্য মাপের অনুকূলিত। এটি সত্যিকার অর্থে কোন ভাষা ব্যবহার করবে তা নির্ভর করে।
tuxayo

@ টাক্সায়ো সম্পূর্ণরূপে একমত, বিশ্বের এশিয়ার অংশের জন্য এটি হানজি এবং কঞ্জি চরিত্রগুলির জন্য উল্লেখযোগ্য।
রোক

শীর্ষ উত্তর হওয়া উচিত। এটি এখানে সমাধিস্থ হওয়া খুব সঠিক।
মিশাল Šতিন

28

আমি আমার ব্লগপোস্টে একটি সহজ ব্যাখ্যা দেওয়ার চেষ্টা করেছি ।

হল UTF-32

যে কোনও অক্ষরকে এনকোড করতে 32 বিট (4 বাইট) প্রয়োজন । উদাহরণস্বরূপ, এই স্কিমটি ব্যবহার করে "ক" অক্ষর কোড-পয়েন্ট উপস্থাপন করতে আপনাকে 32-বিট বাইনারি সংখ্যায় 65 লিখতে হবে:

00000000 00000000 00000000 01000001 (Big Endian)

আপনি যদি ঘনিষ্ঠভাবে নজর রাখেন তবে আপনি খেয়াল করতে পারেন যে ASCII স্কিমটি ব্যবহার করার সময় সর্বাধিক-ডানদিকের সাতটি বিট আসলে একই বিট are তবে যেহেতু ইউটিএফ -32 হয় নির্দিষ্ট প্রস্থের স্কিম , তাই আমাদের অবশ্যই তিনটি অতিরিক্ত বাইট সংযুক্ত করতে হবে। এর অর্থ হ'ল যদি আমাদের কাছে দুটি ফাইল থাকে যা কেবলমাত্র "এ" অক্ষর ধারণ করে, একটি ASCII- এনকোডযুক্ত এবং অন্যটি ইউটিএফ -32 এনকোডযুক্ত থাকে, তবে তাদের আকার 1 বাইট এবং 4 বাইট অনুসারে হবে।

হল UTF-16

অনেক লোক মনে করেন যে ইউটিএফ -32 কোনও কোড-পয়েন্ট উপস্থাপনের জন্য নির্দিষ্ট প্রস্থ 32 বিট ব্যবহার করে, ইউটিএফ -16 স্থির প্রস্থ 16 বিট হয়। ভুল!

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

যেহেতু 7-বিটগুলি "এ" চরিত্রটির প্রতিনিধিত্ব করতে যথেষ্ট, তাই আমরা এখন ইউটিএফ -32 এর মতো 4 এর পরিবর্তে 2 বাইট ব্যবহার করতে পারি। এটি দেখতে দেখতে:

00000000 01000001

হল UTF-8

আপনি সঠিক অনুমান করেছেন .. ইউটিএফ -8 এ সম্ভবত 32, 16, 24 বা 8 বিট ব্যবহার করে এবং পয়েন্টটি ইউটিএফ -16 সিস্টেম হিসাবে কোড পয়েন্টটি উপস্থাপন করেছে, এটি একটি পরিবর্তনশীল দৈর্ঘ্যের এনকোডিং সিস্টেমও।

পরিশেষে আমরা ASCII এনকোডিং সিস্টেমটি ব্যবহার করে আমরা একইভাবে এটি উপস্থাপন করতে পারি:

01001101

একটি ছোট উদাহরণ যেখানে ইউটিএফ -16 আসলে ইউটিএফ -8 এর চেয়ে ভাল:

চীনা অক্ষর "語" বিবেচনা করুন - এর ইউটিএফ -8 এনকোডিংটি হ'ল:

11101000 10101010 10011110

যদিও এর ইউটিএফ -16 এনকোডিং সংক্ষিপ্ত:

10001010 10011110

উপস্থাপনাটি এবং এটি কীভাবে ব্যাখ্যা করা হয়েছে তা বোঝার জন্য, আসল পোস্টটি দেখুন।


19

হল UTF-8

  • বাইট-অর্ডার সম্পর্কে কোনও ধারণা নেই
  • প্রতিটি চরিত্রের জন্য 1 থেকে 4 বাইট ব্যবহার করে
  • এএসসিআইআই এনকোডিংয়ের একটি সামঞ্জস্যপূর্ণ সাবসেট
  • সম্পূর্ণ স্ব-সিঙ্ক্রোনাইজ করা যেমন কোনও প্রবাহের যে কোনও জায়গা থেকে বাদ পড়া বাইট সর্বাধিক একক চরিত্রকে দূষিত করবে
  • প্রায় সমস্ত ইউরোপীয় ভাষা দুটি বাইট বা কম চরিত্রের মধ্যে এনকোড করা থাকে

হল UTF-16

  • বাইট-অর্ডার বা বাইট-অর্ডার-চিহ্ন (বিওএম) পড়ার সাথে অবশ্যই পার্স করা উচিত
  • অক্ষর প্রতি 2 বা 4 বাইট ব্যবহার করে

হল UTF-32

  • প্রতিটি চরিত্র 4 বাইট
  • বাইট-অর্ডার বা বাইট-অর্ডার-চিহ্ন (বিওএম) পড়ার সাথে অবশ্যই পার্স করা উচিত

ইউটিএফ -8 সর্বাধিক স্থান দক্ষ হতে চলেছে যদি না বেশিরভাগ অক্ষর সিজেকে (চাইনিজ, জাপানি এবং কোরিয়ান) বর্ণচিহ্নের স্থান থেকে থাকে।

বাইট-অ্যারেতে অফসেট অক্ষর দ্বারা র্যান্ডম অ্যাক্সেসের জন্য ইউটিএফ -32 সেরা।


ইউটিএফ -8 এ কীভাবে "সেলফ সিঙ্ক্রোনাইজিং" কাজ করে? আপনি কি 1 বাইট এবং 2 বাইট অক্ষরের উদাহরণ দিতে পারেন?
Koray Tugay

2
@ KorayTugay বৈধ শর্ট বাইট স্ট্রিং কখনও আর অক্ষরে ব্যবহৃত হয় না। উদাহরণস্বরূপ, ASCII 0-127 সীমার মধ্যে রয়েছে, অর্থাত্ সমস্ত এক-বাইট অক্ষরের 0xxxxxxxবাইনারি রয়েছে। সমস্ত দ্বি-বাইট অক্ষর 110xxxxxদ্বিতীয় বাইট দিয়ে শুরু হয় 10xxxxxx। সুতরাং আসুন বলি যে একটি বাই-বাইট চরিত্রের প্রথম চরিত্রটি হারিয়ে গেছে is 10xxxxxxপূর্ববর্তীটি ছাড়াই আপনি যত তাড়াতাড়ি দেখতে পাবেন 110xxxxxx, আপনি নিশ্চিত করতে পারেন যে কোনও বাইট হারিয়ে গেছে বা ক্ষতিগ্রস্থ হয়েছে, এবং সেই চরিত্রটি বাতিল করুন (বা এটি কোনও সার্ভার বা যা-কিছু হোক) পুনরায় অনুরোধ করুন এবং আপনি আবার কোনও বৈধ প্রথম বাইট না পাওয়া পর্যন্ত এগিয়ে যান ।
ক্রিস

1
আপনার যদি কোনও চরিত্রের অফসেট থাকে, আপনি সেই চরিত্রটির অফসেট পেয়েছেন - utf8, utf16 বা utf32 সেই ক্ষেত্রে ঠিক একই রকম কাজ করবে; অর্থাত্ এগুলি সমস্ত বাইট অ্যারেতে অফসেট অক্ষর অনুসারে এলোমেলো অ্যাক্সেসে সমানভাবে ভাল। Utf32 এর তুলনায় utf32 অক্ষর গণনায় আরও ভাল ধারণাটিও সম্পূর্ণ মিথ্যা। একজন কোডপয়েন্ট (যা না যা আবার একটি অক্ষর হিসাবে একই, একটি গ্রাফিম হিসাবে একই নয় .. দীর্ঘশ্বাস), utf32 মধ্যে 32 বিট চওড়া এবং 8 ও 32 এর মধ্যে UTF8 বিট, কিন্তু একটি চরিত্র একাধিক codepoints, বিঘত পারে লোকেরা utf32 এর utf8 এর বেশি দাবী করে যে বড় সুবিধাটি ধ্বংস করে।
ক্লিয়ারার

14

আমি মাইএসকিউএলে ইউটিএফ -8 এবং ইউটিএফ -16 এর মধ্যে ডাটাবেস কর্মক্ষমতা তুলনা করতে কিছু পরীক্ষা করেছি tests

আপডেট গতি

হল UTF-8

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

হল UTF-16

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

গতি Inোকান

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

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

গতি মুছুন

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

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


14

ইউটিএফ -32-এ সমস্ত অক্ষর 32 বিট সহ কোডেড হয়। সুবিধাটি হ'ল আপনি সহজেই স্ট্রিংয়ের দৈর্ঘ্য গণনা করতে পারেন। অসুবিধাটি হ'ল প্রতিটি ASCII অক্ষরের জন্য আপনি অতিরিক্ত তিনটি বাইট নষ্ট করেন।

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

UTF-16 এছাড়াও পরিবর্তনশীল দৈর্ঘ্য। অক্ষর দুটি বাইট বা চার বাইটে কোড করা হয়। আমি সত্যিই বিন্দু দেখতে পাচ্ছি না। এটির পরিবর্তনশীল দৈর্ঘ্য হওয়ার অসুবিধা রয়েছে, তবে ইউটিএফ -8 এর মতো বেশি জায়গা সাশ্রয়ের সুবিধা পায়নি।

এই তিনটির মধ্যে স্পষ্টতই ইউটিএফ -8 সবচেয়ে বেশি ছড়িয়ে পড়ে।


ওয়েবসাইটগুলি বিকাশের সময় আমি কেন স্ট্রিংয়ের দৈর্ঘ্য গণনা করতে চাই? ওয়েব বিকাশে ইউটিএফ -8 / ইউটিএফ -16 বেছে নেওয়ার কোনও সুবিধা আছে কি?
মরফিডন

"সুবিধাটি হ'ল আপনি সহজেই স্ট্রিংয়ের দৈর্ঘ্য গণনা করতে পারেন" আপনি যদি কোডপয়েন্টের # দ্বারা দৈর্ঘ্যটি সংজ্ঞায়িত করেন তবে হ্যাঁ, আপনি ইউটিএফ -32 এর সাথে বাইট দৈর্ঘ্যটি 4 দ্বারা বিভক্ত করতে পারেন। এটি খুব কার্যকর সংজ্ঞা নয়, তবে এটি অক্ষরের সংখ্যার সাথে সম্পর্কিত হতে পারে না। এছাড়াও, নরমালাইজেশন স্ট্রিংয়ে কোডপয়েন্টগুলির সংখ্যা পরিবর্তন করতে পারে। উদাহরণস্বরূপ, ফরাসি শব্দ "été" 3 স্বতন্ত্র কোডপয়েন্ট দৈর্ঘ্য সহ কমপক্ষে 4 টি বিভিন্ন উপায়ে এনকোড করা যায়।

ইউটিএফ -16 সম্ভবত ইউটিএফ -8 এর চেয়ে দ্রুততর এবং ইউটিএফ -32-এর মতো কোনও নষ্ট মেমরিও নেই।
মিশাল Šতেদিন

6

আপনার বিকাশের পরিবেশের উপর নির্ভর করে আপনার অভ্যন্তরীণভাবে স্ট্রিং ডেটা টাইপটি কীভাবে এনকোডিং করা হবে তা পছন্দ করতে পারে না।

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


যুক্তিযুক্তভাবে, স্থানের প্রয়োজনীয়তার চেয়ে অনেক বেশি গুরুত্বপূর্ণ এটি হ'ল ইউটিএফ -8 এন্ডিয়েনসনেস থেকে প্রতিরোধী। ইউটিএফ -১ and এবং ইউটিএফ -32 এ অবশ্যম্ভাবীভাবে শেষের বিষয়গুলি নিয়ে কাজ করতে হবে, যেখানে ইউটিএফ -8 কেবল অক্টেটের একটি স্ট্রিম।
IInspectable

2

উল্লিখিত হিসাবে, পার্থক্যটি মূলত অন্তর্নিহিত ভেরিয়েবলের আকার, যা প্রতিটি ক্ষেত্রে আরও অক্ষর উপস্থাপনের অনুমতি পেতে বড় হয়।

তবে, ফন্ট, এনকোডিং এবং জিনিসগুলি দুষ্টুভাবে জটিল (অযথা?) তাই আরও বিশদ পূরণের জন্য একটি বড় লিঙ্ক প্রয়োজন:

http://www.cs.tut.fi/~jkorpela/chars.html#ascii

এগুলি সমস্ত কিছু বোঝার আশা করবেন না, তবে আপনি যদি পরে সমস্যা না চান তবে এটি যত তাড়াতাড়ি আপনি পারেন (বা কেবল অন্য কাউকে আপনার জন্য বাছাই করার জন্য) এটি যতটা সম্ভব শেখা উচিত।

পল।


বা কেবল ইউটিএফ -8 ডিফল্ট হিসাবে এটি ব্যবহার করুন কারণ এটি ডি-ফ্যাক্টো স্ট্যান্ডার্ড হয়ে গেছে এবং এটি আবিষ্কার করুন যে কোনও নতুন সিস্টেম এটি সমর্থন করে কিনা। যদি এটি না হয় তবে আপনি এই পোস্টে ফিরে আসতে পারেন।
রোবটিক

-2

সংক্ষেপে, ইউটিএফ -16 বা ইউটিএফ -32 ব্যবহারের একমাত্র কারণ যথাক্রমে অ-ইংরেজি এবং প্রাচীন স্ক্রিপ্টগুলি সমর্থন করা।

আমি ভাবছিলাম যে ওয়েব / প্রোগ্রামিংয়ের উদ্দেশ্যে যখন এটি স্পষ্টতই বেশি দক্ষ হবে তখন কেন কেউ ইউটিএফ -8 এনকোডিংবিহীন নির্বাচন করবেন না।

একটি সাধারণ ভুল ধারণা - প্রত্যয়যুক্ত সংখ্যাটি তার সামর্থ্যের ইঙ্গিত দেয় না। তারা সকলেই সম্পূর্ণ ইউনিকোডকে সমর্থন করে, কেবলমাত্র ইউটিএফ -8 একক বাইট দ্বারা এএসসিআইআই পরিচালনা করতে পারে, তাই সিপিইউ এবং ইন্টারনেটে আরও দক্ষ / কম দুর্নীতিগ্রস্থ।

কিছু ভাল পঠন: http://www.personal.psu.edu/ejp10/blogs/gotunicode/2007/10/ যে_আউটফ_ডো_আই_উস html এবং http://utf8everywhere.org


আমি নিশ্চিত নই, কেন আপনি পরামর্শ দিচ্ছেন যে ইউটিএফ -16 বা ইউটিএফ -32 ব্যবহার করে তা অ-ইংরেজি পাঠ্য সমর্থন করে। ইউটিএফ -8 ঠিক ঠিক এটি পরিচালনা করতে পারে। এবং ইংরেজী পাঠ্যেও অ-এসসিআইআই অক্ষর রয়েছে। শূন্য প্রস্থের নন-জোয়ারের মতো। অথবা একটি এম ড্যাশ। আমি ভয় পাচ্ছি, এই উত্তরটি খুব বেশি মান দেয় না।
IInspectable

এই প্রশ্নটি ডাউনভোটিংয়ের জন্য দায়বদ্ধ কারণ ইউটিএফ -8 টি এখনও সাধারণভাবে এইচটিএমএল ফাইলগুলিতে ব্যবহৃত হয় এমনকি সর্বাধিক অক্ষরগুলি ইউটিএফ -8-তে 3-বাইট অক্ষর
হলেও

@Inspectable সমর্থন সেরা শব্দভাজন নয়, প্রচার বা আরও ভাল সমর্থন আরও সঠিক হবে
রোবটিক

Utf8everywhere.org এর মতো একটি পৃষ্ঠা পাঠানো কোনও এসও উত্তরে আমি কী করব তা নয়।
মিশাল Štein
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.