এনকোডিং এবং চারসেটের মধ্যে পার্থক্য কী?


151

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

আমি "ISO-2022-JP" এর মতো ইমেল শিরোনামগুলিতে "চরসেট" শব্দটি পেয়েছি, তবে পাঠ্য সম্পাদকগুলিতে এ জাতীয় কোনও এনকোডিং নেই। (আমি বিভিন্ন পাঠ্য সম্পাদককে ঘুরে দেখলাম))

পাঠ্য এনকোডিং এবং চরসেটের মধ্যে পার্থক্য কী? আপনি যদি আমাকে কিছু ব্যবহারের ক্ষেত্রে উদাহরণ প্রদর্শন করতে পারেন তবে আমি এটির প্রশংসা করব।


: এই পোস্টটিকে দেখতে পারবেন stackoverflow.com/questions/13743250/...
rghome

উত্তর:


144

মূলত:

  1. চরসেট হ'ল অক্ষরগুলির সেট যা আপনি ব্যবহার করতে পারেন
  2. এনকোডিং হল এই অক্ষরগুলিকে মেমরিতে সংরক্ষণ করা হয়

42
সত্য, তবে প্রকৃত ব্যবহারে "চরসেট" সাধারণত চরিত্রের খণ্ডন এবং এনকোডিং স্কিম উভয়কেই বোঝায় ।
অ্যালান মুর

@ অ্যালানমুর প্রকৃতপক্ষে, ঠিক একইভাবে লোকেরা "দশমিক সংখ্যা" বলতে কোনও "দশমিক বিভাজক" দিয়ে যে কোনও সংখ্যাকে বোঝায়। এটি সত্যই সঠিক নয়, তবে হ্যাঁ আপনার সচেতন হওয়া উচিত যে কিছু লোক এটির মতো ব্যবহার করে।
বিভিডিবি

2
এটা ঠিক ঠিক নেই। উদাহরণস্বরূপ, ইউনিকোড অক্ষর সেটকে বোঝায়, তবে একাধিক সম্ভাব্য এনকোডিং রয়েছে (UTF-8, UTF-16, UTF-32)।
rghome

84

প্রতিটি এনকোডিং এর সাথে একটি নির্দিষ্ট অক্ষর যুক্ত থাকে তবে প্রদত্ত চারসেটের জন্য একাধিক এনকোডিং থাকতে পারে। একটি অক্ষরটি কেবল যা মনে হয় তা হ'ল অক্ষরের একটি সেট। বিশেষ স্ক্রিপ্ট বা ভাষার জন্য নির্মিত অনেকগুলি সহ অনেকগুলি অক্ষর রয়েছে।

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


20
নোট করুন যে জাভাডোক ভুলভাবে "এনকোডিং" এর পরিবর্তে "চরসেট" ব্যবহার করে, উদাহরণস্বরূপ ইনপুটস্ট্রিমার্ডারে আমরা পড়ি "একটি ইনপুটস্ট্রিম রিডার একটি ব্রীট স্ট্রিম থেকে শুরু করে চরিত্রের স্ট্রিম পর্যন্ত সেতু: এটি বাইটগুলি পড়ে এবং একটি নির্দিষ্ট অক্ষর ব্যবহার করে অক্ষরগুলিতে ডিকোড করে cha এটি ব্যবহার করে নাম দ্বারা নির্দিষ্ট করা যেতে পারে বা স্পষ্টভাবে দেওয়া যেতে পারে, বা প্ল্যাটফর্মের ডিফল্ট চরসেটটি গ্রহণ করা যেতে পারে। । তবে, তাদের অর্থ "এনকোডিং"।
ডেভিড টোনহোফার

4
আপনার ব্যাখ্যা জন্য ধন্যবাদ। ইউনিকোড একটি অক্ষর সেট এবং ইউটিএফ -8 ইউনিকোডের একটি এনকোডিং উপায় এবং ইউটিএফ -16 ইউনিকোডের অন্য একটি এনকোডিং উপায় ।
হংকচাওজ্যাং

47

অন্যান্য উত্তরের পাশাপাশি আমার মনে হয় এই নিবন্ধটি একটি ভাল পঠনযোগ্য http://www.joelonsoftware.com/articles/Unicode.html

নিবন্ধটির শিরোনাম রয়েছে " দ্য অ্যাবসোলিউট মিনিমাম প্রত্যেকটি সফটওয়্যার ডেভেলপার একেবারে, ইতিবাচকভাবে অবশ্যই ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে জানতে হবে (কোনও অজুহাত!) " জোয়েল স্পোলস্কি লিখেছেন । প্রবন্ধটি 10 ​​বছরেরও বেশি পুরানো তবে (দুর্ভাগ্যক্রমে) সামগ্রীটি এখনও বৈধ ...


2
নিবন্ধটি প্রবর্তনের জন্য অনেক ধন্যবাদ। এটা তোলে হয় ভালো।
টি।

9
আমার জোলের নিবন্ধটি কেন পড়তে হবে তার একটি সংক্ষিপ্ত ব্যাখ্যা দিয়ে এই উত্তরটির উন্নতি করা যেতে পারে ।
james.garriss

@ মাত্তানজা আপনার সরবরাহিত লিঙ্কটি দুর্দান্ত। ভাগ করে নেওয়ার জন্য ধন্যবাদ. ভোট দিয়েছেন।
হাগড়াওয়াল

1
আমি এই দুর্দান্ত নিবন্ধটিও রাখতে চাই যা জোয়েল স্পলস্কির প্রতি দয়াশীল অ্যাপেন্ডিক্স; kunststube.net/encoding
এম কে বি

আমার প্রথম পড়ার পরে আমি জোলের নিবন্ধটি বুঝতে পারি নি। বরং আমি এই পাওয়ারপয়েন্টটি
টিএন

27

একটি অক্ষর এনকোডিং এর সমন্বয়ে গঠিত:

  1. সমর্থিত অক্ষরের সেট
  2. অক্ষর এবং পূর্ণসংখ্যার মধ্যে একটি ম্যাপিং ("কোড পয়েন্ট")
  3. কোড পয়েন্টগুলি কীভাবে "কোড ইউনিট" এর সিরিজ হিসাবে এনকোড করা হয় (উদাঃ, ইউটিএফ -16 এর জন্য 16-বিট ইউনিট)
  4. কীভাবে কোড ইউনিটগুলি বাইটে এনকোড করা হয় (যেমন, বিগ-এডিয়ান বা লিটল এন্ডিয়ান)

পদক্ষেপ # 1 নিজে থেকে একটি "চরিত্রের পুনঃনির্দেশ" বা বিমূর্ত "চরিত্রের সেট", এবং # 1 + # 2 = a "কোডেড অক্ষর সেট"।

তবে ইউনিকোড জনপ্রিয় হওয়ার আগে এবং সকলেই (পূর্ব এশিয়ানরা বাদে) একটি একক বাইট এনকোডিং ব্যবহার করছিল, # 3 এবং # 4 ধাপগুলি ছিল তুচ্ছ (কোড পয়েন্ট = কোড ইউনিট = বাইট)। সুতরাং, পুরানো প্রোটোকলগুলি "চরিত্রের এনকোডিং" এবং "কোডেড অক্ষর সেট" এর মধ্যে পরিষ্কারভাবে পার্থক্য করে না। পুরানো প্রোটোকলগুলি charsetযখন এনকোডিংয়ের প্রকৃত অর্থ তখন ব্যবহার করে।


এইচটিএমএল মেটা ট্যাগে আমরা চরসেট = 'utf-8' পড়তে পারি কেন তাই হবে? কারণ এটি অনেক আগে সংজ্ঞায়িত হয়েছিল
ইলডোসা

26

এখন থেকে পরিদর্শন করা লোকদের জন্য আরও আলোকপাত করা, আশা করি এটি সহায়ক হবে।


অক্ষর সেট

প্রতিটি ভাষায় অক্ষর রয়েছে এবং সেই অক্ষরগুলির সংগ্রহগুলি সেই ভাষার "চরিত্র সেট" গঠন করে। যখন কোনও অক্ষর এনকোড করা থাকে তখন এটিকে একটি অনন্য শনাক্তকারী বা কোড পয়েন্ট হিসাবে পরিচিত এমন একটি নম্বর বরাদ্দ করা হয়। কম্পিউটারে এই কোড পয়েন্টগুলি এক বা একাধিক বাইট দ্বারা উপস্থাপিত হবে।

চরিত্রের সেটগুলির উদাহরণ: এএসসিআইআই (সমস্ত ইংরেজি অক্ষরকে কভার করে), আইএসও / আইইসি 64৪6, ইউনিকোড (বিশ্বের সমস্ত জীবিত ভাষার অক্ষরকে কভার করে)

কোডেড অক্ষর সেট

কোডেড অক্ষর সেটটি এমন একটি সেট যা প্রতিটি চরিত্রের জন্য একটি অনন্য নম্বর বরাদ্দ করা হয়। এই অনন্য নম্বরটিকে "কোড পয়েন্ট" বলা হয়।
কোডেড অক্ষর সেটগুলিকে কখনও কখনও কোড পৃষ্ঠা বলা হয়।

এনকোডিং

এনকোডিং হ'ল কোড পয়েন্টগুলিকে কিছু বাইটের সাথে মানচিত্র করার ব্যবস্থা করা হয় যাতে একটি অক্ষর একই এনকোডিং স্কিম ব্যবহার করে বিভিন্ন সিস্টেমে অভিন্নভাবে লেখা ও লেখা যায়।

এনকোডিংয়ের উদাহরণ: ইউএসএফআই, ইউটিএফ -16, ইউটিএফ -32 এর মতো এএসসিআইআই, ইউনিকোড এনকোডিং স্কিম।

উপরে 3 টি ধারণার বিবরণ

  • এটি বিবেচনা করুন - দেবনাগরী চরিত্র সেটের অক্ষর 'ক' এর দশমিক কোড পয়েন্ট রয়েছে 2325 যা ইউটিএফ -16 এনকোডিং09 15 ব্যবহার করার সময় দুটি বাইট ( ) দ্বারা উপস্থাপিত হবে
  • "আইএসও -8859-1" এনকোডিং স্কিম "ü" এ (এটি ল্যাটিন অক্ষর সেটের একটি অক্ষর ছাড়া কিছুই নয়) হেক্সা-দশমিক মান হিসাবে উপস্থাপিত হয়েছে FCযখন "ইউটিএফ -8" তে এটি C3 BCইউটিএফ -16 হিসাবে উপস্থাপিত হয়েছিল FE FF 00 FC
  • বিভিন্ন এনকোডিং স্কিম বিভিন্ন অক্ষর উপস্থাপন করতে একই কোড পয়েন্ট ব্যবহার করতে পারে, উদাহরণস্বরূপ "আইএসও -8859-1" (ল্যাটিন 1 নামেও ডাকা হয়) অক্ষরের 'é' এর দশমিক কোড পয়েন্টের মান 233. তবে, আইএসও 8859-5-তে , একই কোড পয়েন্ট সিরিলিক অক্ষর 'щ' উপস্থাপন করে।
  • অন্যদিকে, ইউনিকোড অক্ষর সংস্থার একটি একক কোড পয়েন্টটি নথির জন্য কোন এনকোডিংটি ব্যবহার করা হয়েছিল তার উপর নির্ভর করে বিভিন্ন বাইট অনুক্রমগুলিতে আসলে ম্যাপ করা যায় ma দেওয়ানাগরী চরিত্র ক, কোড পয়েন্ট 2325 সহ (যা হেক্সাডেসিমাল নোটেশনে 915), ইউটিএফ -16 এনকোডিং ( 09 15), ইউটিএফ -8 ( E0 A4 95) সহ তিনটি বাইট বা ইউটিএফ -32 সহ চার বাইট ব্যবহার করার সময় দুটি বাইট দ্বারা উপস্থাপিত হবে ( 00 00 09 15)

11

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


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি পরিষ্কারভাবে তিনটি ধারণা সংজ্ঞা দেয়: অক্ষর সেট, কোডেড অক্ষর সেট এবং এনকোডিং।
মার্কাস জুনিয়াস ব্রুটাস

6

এটির জন্য গুগলড http://en.wikipedia.org/wiki/Character_encoding

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

চরসেটগুলি আসলে এড়িয়ে যায় এবং সরাসরি অক্ষর থেকে বাইটে ঝাঁপ দেয়। বাইটের ক্রম <-> অক্ষরের ক্রম

সংক্ষেপে, এনকোডিং: কোড পয়েন্ট -> বাইট চার্সেট: অক্ষর -> বাইট


5

একটি অক্ষর মাত্র একটি সেট; এটিতে রয়েছে, যেমন ইউরো চিহ্ন, নাহলে তা থাকে না। এখানেই শেষ.

একটি এনকোডিং হ'ল একটি অক্ষর থেকে একটি পূর্ণসংখ্যার সেটগুলিতে সেট করা বাইজিক ম্যাপিং। যদি এটি ইউরো চিহ্নকে সমর্থন করে, তবে অবশ্যই এটি অবশ্যই সেই চরিত্রের জন্য নির্দিষ্ট পূর্ণসংখ্যার এবং অন্য কোনওটির জন্য নির্ধারিত হবে।


এটি দ্বিপ্রদীপক হতে হবে?
Jörg ডব্লু মিটাগ

2
ঠিক আছে, এনকোডিং এবং ডিকোডিংটি নির্বিচারবাদী হওয়া উচিত, সুতরাং সত্যিই কোনও অস্পষ্ট ম্যাপিং থাকতে পারে না। আমি মনে করি আপনার কোডোমেন হিসাবে একটি অ-সংখ্যক পূর্ণসংখ্যার সেট থাকতে পারে তবে আপনি পাঠ্য সঞ্চয় করার সময় স্থানটি নষ্ট হবে এবং ইঞ্জিনিয়াররা নষ্ট স্থানকে ঘৃণা করবে।
কিলিয়ান ফট

1
লিগ্যাসি চরিত্রের এনকোডিংগুলি প্রায়শই দ্বিপ্রস্থ হয় না। উদাহরণস্বরূপ, IBM437 এ, ß এবং both উভয়ই 0xE1 দ্বারা প্রতিনিধিত্ব করা হয়।
dan04

3

আমার মতে, একটি অক্ষর একটি এনকোডিং (একটি উপাদান) এর অংশ, এনকোডিংয়ের একটি অক্ষর বৈশিষ্ট্য রয়েছে, তাই অনেকগুলি এনকোডিংগুলিতে একটি অক্ষর ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, ইউনিকোড হল একটি অক্ষর যা ইউটিএফ -8, ইউটিএফ -16 এবং এর মতো এনকোডিংগুলিতে ব্যবহৃত হয়। চিত্র এখানে দেখুন:চিত্র এখানে দেখুন

চার্সেটের চরটি প্রোগ্রামিং বিশ্বে চারের ধরণের অর্থ বোঝায় না, এর অর্থ বাস্তব জগতের চর, ইংরাজীতে এটি একই রকম হতে পারে, তবে অন্যান্য ভাষায় নয়, চাইনিজদের মতো '我' অক্ষরগুলিতে একটি অবিচ্ছেদ্য 'চর' (ইউনিকোডে, জিবি [জিবিকে এবং জিবি ২৩১২ তে ব্যবহৃত]), 'এ' অক্ষরেখার একটি চর (ASCII, ISO-8859 , UNICODE)।


1

আমার মতে "চরসেট" শব্দটি নামের সাথে একটি অক্ষর এনকোডিং (টেক্সট অক্ষরের একটি ধারাবাহিক থেকে বাইটের ক্রমে ম্যাপিং) নির্দিষ্ট করার জন্য HTTP, MIME এবং অনুরূপ মানগুলিতে ব্যবহৃত পরামিতি সনাক্তকরণের মধ্যে সীমাবদ্ধ হওয়া উচিত। উদাহরণস্বরূপ: charset=utf-8

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


1

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

বাইটগুলি 0 এবং 255 এর মধ্যে সংখ্যা হিসাবে মনে করুন, যেখানে অক্ষরগুলি "a", "1", "$" এবং "Ä" এর মতো বিমূর্ত জিনিস। উপলব্ধ সমস্ত অক্ষরের সেটকে একটি অক্ষর সেট বলে

প্রতিটি চরিত্রের এক বা একাধিক বাইটের ক্রম রয়েছে যা এর প্রতিনিধিত্ব করতে ব্যবহৃত হয়; যাইহোক, বাইটের সঠিক সংখ্যা এবং মান ব্যবহৃত এনকোডিংয়ের উপর নির্ভর করে এবং অনেকগুলি বিভিন্ন এনকোডিং রয়েছে।

বেশিরভাগ এনকোডিংগুলি পুরানো অক্ষর সেট এবং এএসসিআইআই নামক এনকোডিংয়ের উপর ভিত্তি করে যা প্রতিটি চরিত্রের জন্য একক বাইট (প্রকৃতপক্ষে কেবলমাত্র 7 বিট) থাকে এবং এতে ইউএস ইংরাজীতে ব্যবহৃত প্রচলিত প্রচলিত অক্ষর সহ 128 টি অক্ষর রয়েছে।

উদাহরণস্বরূপ, ASCII অক্ষর সেটটিতে এখানে 6 টি অক্ষর রয়েছে যা 60 থেকে 65 এর মান দ্বারা প্রতিনিধিত্ব করা হয়।

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

সম্পূর্ণ ASCII সেটটিতে ব্যবহৃত সর্বনিম্ন মানটি শূন্য এবং সর্বাধিক 127 হয় (এটি উভয়ই লুকানো নিয়ন্ত্রণের অক্ষর)।

তবে একবারে আপনার যখন বেসিক ASCII সরবরাহ করে তার চেয়ে বেশি অক্ষরের প্রয়োজন শুরু হয় (উদাহরণস্বরূপ, উচ্চারণ, মুদ্রার চিহ্ন, গ্রাফিক প্রতীক ইত্যাদি) সহ, ASCII উপযুক্ত নয় এবং আপনার আরও কিছু বিস্তৃত প্রয়োজন। আপনার আরও অক্ষর প্রয়োজন (একটি আলাদা অক্ষর সেট) এবং আপনার একটি পৃথক এনকোডিং দরকার কারণ 128 টি অক্ষর সমস্ত অক্ষরের সাথে খাপ খায় যথেষ্ট নয় Some কিছু এনকোডিংগুলি একটি বাইট (256 অক্ষর) বা ছয় বাইট পর্যন্ত অফার করে।

সময়ের সাথে সাথে প্রচুর এনকোডিং তৈরি করা হয়েছে। উইন্ডোজ বিশ্বে, সিপি 1252, বা আইএসও -8859-1 রয়েছে, যেখানে লিনাক্স ব্যবহারকারীরা ইউটিএফ -8 সমর্থন করে। জাভা ইউটিএফ -16 স্থানীয়ভাবে ব্যবহার করে।

একটি এনকোডিংয়ের একটি অক্ষরের জন্য বাইট মানগুলির একটি অনুক্রম অন্য এনকোডিংয়ে সম্পূর্ণ ভিন্ন চরিত্রের জন্য দাঁড়িয়ে থাকতে পারে বা অবৈধও হতে পারে।

উদাহরণস্বরূপ, আইএসও 8859-1 , একটি ¢ একটি মান এক বাইট দ্বারা প্রতিনিধিত্ব করা হয় 226, যেহেতু এ হল UTF-8 এটিকে দুটি বাইট: 195, 162। যাইহোক, এ আইএসও 8859-1 , 195, 162দুই অক্ষর, হবে , একটি ¢

কম্পিউটারগুলি অক্ষর সম্পর্কে তথ্য অভ্যন্তরীণভাবে সঞ্চয় করে বা অন্য সিস্টেমে প্রেরণ করে, তারা বাইটগুলি সঞ্চয় করে বা প্রেরণ করে। কোনও ফাইল কোনও ফাইল খোলার বা বার্তা প্রাপ্তির বাইটগুলি দেখে কল্পনা করুন 195, 162। এটি কীভাবে জানতে পারে যে এগুলি চরিত্রগুলি কী?

সিস্টেমটি সেই বাইটগুলি প্রকৃত চরিত্র হিসাবে ব্যাখ্যা করার জন্য (এবং সেগুলি প্রদর্শিত বা তাদের অন্য এনকোডিংয়ে রূপান্তর করে), এটি ব্যবহৃত এনকোডিংটি জানতে হবে। এজন্য এক্সএমএল শিরোনামে এনকোডিং প্রদর্শিত হবে বা কোনও পাঠ্য সম্পাদককে নির্দিষ্ট করা যেতে পারে। এটি সিস্টেমকে বাইটস এবং অক্ষরের মধ্যে ম্যাপিংয়ের কথা বলে।

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