ইউনিকোড, ইউটিএফ -8, ইউটিএফ -16 কী?


395

ইউনিকোডের ভিত্তি কী এবং কেন ইউটিএফ -8 বা ইউটিএফ -16 দরকার? আমি গুগলে এটি গবেষণা করেছি এবং পাশাপাশি অনুসন্ধান করেছি কিন্তু এটি আমার কাছে পরিষ্কার নয় clear

ভিএসএসে কোনও ফাইল তুলনা করার সময়, কখনও কখনও একটি বার্তা আসে যে দুটি ফাইলের ইউটিএফের পার্থক্য রয়েছে। কেন এমন হবে?

সহজ শর্তে ব্যাখ্যা করুন।




4
@ জন: এটি একটি খুব সুন্দর পরিচয়, তবে এটি চূড়ান্ত উত্স নয়: এটি বিশদটি বেশ কিছু বাদ দিয়েছে (যা একটি সংক্ষিপ্ত বিবরণ / পরিচিতির জন্য ভাল!)
জোচিম সৌর

5
নিবন্ধটি দুর্দান্ত, তবে এতে বেশ কিছু ভুল রয়েছে এবং কিছুটা রক্ষণশীল আলোতে ইউটিএফ -8 উপস্থাপন করে। আমি পরিপূরক হিসাবে utf8e Everybody.org পড়ার পরামর্শ দিচ্ছি।
পাভেল রদজিভিলভস্কি

2
এই ওয়েবসাইটটি একবার দেখুন: utf8everywhere.org
Vertexwahn

উত্তর:


550

কেন আমাদের ইউনিকোড দরকার?

(খুব বেশি নয়) প্রথম দিনগুলিতে যা ছিল তা ছিল এসএসআইআই। এটি ঠিক ছিল, যেহেতু যে সমস্ত দরকার হবে তা এই বাক্যটির মতো কয়েকটি নিয়ন্ত্রণ অক্ষর, বিরামচিহ্ন, সংখ্যা এবং অক্ষর। দুর্ভাগ্যক্রমে, আজকের বৈশ্বিক আন্তঃযোগাযোগ এবং সামাজিক মিডিয়াগুলির আজব পৃথিবীটি আগে থেকেই ধারণা করা হয়নি এবং একই নথিতে ইংরাজী, العربية, 汉语, עִבְרִית, ελληνικά, see এবং see দেখা খুব অস্বাভাবিক কিছু নয় (আমি আশা করি আমি কোনও পুরানো ভাঙ্গেনি) ব্রাউজার)।

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

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

স্মৃতি বিবেচনা

তাহলে এই এনকোডিংগুলিতে কয়টি বাইট অ্যাক্সেস দেয়?

  • হল UTF-8:
    • 1 বাইট: স্ট্যান্ডার্ড এএসসিআইআই
    • 2 বাইট: আরবি, হিব্রু, বেশিরভাগ ইউরোপীয় স্ক্রিপ্ট (উল্লেখযোগ্যভাবে জর্জিয়ান বাদে )
    • 3 বাইট: বিএমপি
    • 4 বাইট: সমস্ত ইউনিকোড অক্ষর
  • হল UTF-16:
    • 2 বাইট: বিএমপি
    • 4 বাইট: সমস্ত ইউনিকোড অক্ষর

এটি এখন উল্লেখ করার মতো যে বিএমপিতে নেই এমন চরিত্রগুলির মধ্যে রয়েছে প্রাচীন স্ক্রিপ্টস, গাণিতিক প্রতীক, সংগীত প্রতীক এবং বিরল চীনা / জাপানি / কোরিয়ান (সিজেকে) অক্ষর।

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

এনকোডিং বেসিক

দ্রষ্টব্য: আপনি যদি ইউটিএফ -8 এবং ইউটিএফ -16 কীভাবে এনকোডড করে থাকেন তা জানেন, ব্যবহারিক অ্যাপ্লিকেশনগুলির জন্য পরবর্তী বিভাগে যান।

  • UTF-8: স্ট্যান্ডার্ড ASCII (0-127) অক্ষরের জন্য, UTF-8 কোডগুলি অভিন্ন। এটি ইউটিএফ -8 আদর্শ করে তোলে যদি বিদ্যমান ASCII পাঠ্যের সাথে পিছনের দিকে সামঞ্জস্যতা প্রয়োজন হয়। অন্যান্য অক্ষরের জন্য 2-4 বাইট থেকে যে কোনও জায়গায় প্রয়োজন। এটি একটি বহু-বাইট চরিত্রের অংশ কিনা তা বোঝানোর জন্য এই প্রতিটি বাইটে কিছু বিট সংরক্ষণ করে এটি করা হয়। বিশেষত, প্রতিটি বাইটের প্রথম বিটটি 1ASCII অক্ষরগুলির সাথে সংঘাত এড়ানো।
  • ইউটিএফ -16: বৈধ বিএমপি অক্ষরের জন্য, ইউটিএফ -16 প্রতিনিধিত্ব কেবল তার কোড পয়েন্ট। তবে, বিএমপিবিহীন অক্ষরের জন্য ইউটিএফ -১ 16 সার্গেট জুটি প্রবর্তন করে । এক্ষেত্রে দুটি বি-বাইট অংশের মানচিত্রটি একটি নন-বিএমপি অক্ষরকে মিশ্রণ করে। এই দ্বি-বাইট অংশগুলি বিএমপি সংখ্যার পরিসীমা থেকে আসে তবে ইউনিকোড স্ট্যান্ডার্ড দ্বারা বিএমপি অক্ষর হিসাবে অবৈধ হওয়ার নিশ্চয়তা দেয়। এছাড়াও, যেহেতু ইউটিএফ -16 এর প্রাথমিক একক হিসাবে দুটি বাইট রয়েছে, তাই এটি আধ্যাত্মিকতা দ্বারা প্রভাবিত হয় । ক্ষতিপূরণ দেওয়ার জন্য, কোনও স্ট্রিমের শুরুতে একটি সংরক্ষিত বাইট অর্ডার চিহ্ন স্থাপন করা যেতে পারে যা শেষের দিক নির্দেশ করে। সুতরাং, আপনি যদি ইউটিএফ -16 ইনপুটটি পড়ছেন এবং কোনও অন্তর্নিহিততা নির্দিষ্ট করা হয়নি, আপনাকে অবশ্যই এটি পরীক্ষা করে দেখতে হবে।

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

ব্যবহারিক প্রোগ্রামিং বিবেচনা

চরিত্র এবং স্ট্রিং ডেটা প্রকার: এগুলি প্রোগ্রামিং ভাষায় কীভাবে এনকোড হয়? যদি সেগুলি কাঁচা বাইট হয়, আপনি যে-মিনিটের পরে অ-এসসিআইআই অক্ষরগুলি আউটপুট দেওয়ার চেষ্টা করবেন, আপনি কয়েকটি সমস্যার মধ্যে পড়তে পারেন। এছাড়াও, এমনকি যদি চরিত্রের ধরনটি কোনও ইউটিএফ-এর উপর ভিত্তি করে থাকে, তার মানে এই নয় যে স্ট্রিংগুলি যথাযথ ইউটিএফ। তারা অবৈধ যে বাইট অনুক্রমের অনুমতি দিতে পারে। সাধারণত, আপনাকে এমন একটি গ্রন্থাগার ব্যবহার করতে হবে যা ইউটিএফ সমর্থন করে, যেমন আই সি ইউ , সি ++ এবং জাভা হিসাবে। যে কোনও ক্ষেত্রে, আপনি যদি ডিফল্ট এনকোডিং ছাড়া অন্য কোনও ইনপুট / আউটপুট দিতে চান তবে আপনাকে প্রথমে এটি রূপান্তর করতে হবে।

প্রস্তাবিত / ডিফল্ট / প্রভাবশালী এনকোডিংগুলি: যখন কোন ইউটিএফ ব্যবহার করতে হয় তার কোনও পছন্দ দেওয়া হলে, আপনি যে পরিবেশে কাজ করছেন তার জন্য প্রস্তাবিত মানগুলি অনুসরণ করা ভাল example উদাহরণস্বরূপ, ইউটিএফ -8 ওয়েবে প্রভাবশালী এবং HTML5 থেকে এটি এটি হয়েছে প্রস্তাবিত এনকোডিং । বিপরীতভাবে, .NET এবং জাভা উভয় পরিবেশই একটি ইউটিএফ -16 অক্ষর টাইপের ভিত্তিতে প্রতিষ্ঠিত। বিভ্রান্তিকরভাবে (এবং ভুলভাবে) উল্লেখগুলি প্রায়শই "ইউনিকোড এনকোডিং" -কে করা হয়, যা সাধারণত প্রদত্ত পরিবেশে প্রভাবশালী ইউটিএফ এনকোডিংকে বোঝায়।

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

অক্ষর গণনা: ইউনিকোডে অক্ষরের সংমিশ্রণ রয়েছে । উদাহরণস্বরূপ কোড পয়েন্ট U + 006E (n), এবং ইউ + 0303 (একটি সংমিশ্রণ টিলড) গঠন করে but তবে কোড পয়েন্ট U + 00F1 ফর্ম ñ ñ তাদের দেখতে অভিন্ন দেখতে হবে, তবে একটি সাধারণ গণনা অ্যালগরিদম প্রথম উদাহরণের জন্য 2, পরবর্তীগুলির জন্য 1 প্রদান করবে। এটি অগত্যা ভুল নয়, তবে পছন্দসই ফলাফলও নাও হতে পারে।

সমতার জন্য তুলনা: এ, А, এবং the একই চেহারা তবে তারা যথাক্রমে লাতিন, সিরিলিক এবং গ্রীক। আপনার সি এবং Ⅽ এর মতো কেসও রয়েছে, একটি হ'ল একটি চিঠি, অন্যটি রোমান সংখ্যার। তদতিরিক্ত, আমাদের পাশাপাশি সম্মিলিত অক্ষর রয়েছে। আরও তথ্যের জন্য ইউনিকোডে সদৃশ অক্ষরগুলি দেখুন ।

সারোগেট জোড়: এগুলি প্রায়শই যথেষ্ট হয় তাই আমি কেবল কয়েকটি উদাহরণ লিঙ্ক সরবরাহ করব:

অন্যান্য?:


11
দুর্দান্ত উত্তর, অনুগ্রহের দুর্দান্ত সম্ভাবনা ;-) ব্যক্তিগতভাবে আমি যুক্ত করেছি যে কিছু ইউটিএফ -8 এর সার্বজনীন চরিত্রের এনকোডিং হিসাবে যুক্তিযুক্ত , তবে আমি জানি যে এটি এমন একটি মতামত যা সবার দ্বারা ভাগ করা উচিত নয়।
জোছিম সউর

3
এখনও এই পর্যায়ে আমার জন্য খুব প্রযুক্তিগত। ইউটিএফ -8 এবং ইউটিএফ -16 এ হ্যালো শব্দটি একটি কম্পিউটারে কীভাবে সংরক্ষণ করা হয়?
ফার্স্টনেম লাস্টনাম

1
আপনি কেন আরও প্রসারিত করতে পারেন, উদাহরণস্বরূপ, বিএমপি ইউটিএফ -8 এ 3 বাইট নেয়? আমি ভাবতাম যেহেতু এর সর্বোচ্চ মান 0xFFFF (16 বিট) হয় তবে এটি অ্যাক্সেস করতে কেবল 2 বাইট লাগবে।
চিহ্নিত করুন

2
@ চিহ্নিত কিছু বিট এনকোডিংয়ের জন্য সংরক্ষিত। ইউটিএফ -8 এ 2 বাইট লাগে এমন একটি কোড পয়েন্টের জন্য, 5 টি সংরক্ষিত বিট রয়েছে, একটি কোড পয়েন্ট নির্বাচন করতে কেবল 11 বিট রেখে। U + 07FF 2 বাইটে উপস্থাপনযোগ্য সর্বোচ্চ কোড পয়েন্ট হিসাবে শেষ হয় ends
ডিপেনার 1

1
বিটিডাব্লু - এএসসিআইআই কেবলমাত্র 128 কোড পয়েন্টগুলি সংজ্ঞায়িত করে, প্রতিনিধিত্বের জন্য মাত্র 7 বিট ব্যবহার করে। এটি আইএসও -8859-1 / আইএসও -8859-15 যা 256 কোড পয়েন্ট নির্ধারণ করে এবং উপস্থাপনের জন্য 8 বিট ব্যবহার করে। এই 3 টিতে প্রথম 128 কোড পয়েন্ট একই are
টাক্সডুড

67
  • ইউনিকোড
    • বিশ্বজুড়ে ব্যবহৃত অক্ষরের একটি সেট
  • হল UTF-8
    • ইউনিকোডে সমস্ত সম্ভাব্য অক্ষরকে কোড কোড পয়েন্ট বলে এনকোডিং করতে সক্ষম এমন একটি অক্ষর এনকোডিং।
    • কোড ইউনিট 8 বিট হয়
    • ইউনিকোড এনকোড করতে এক থেকে চার কোড একক ব্যবহার করুন
    • " $ " (এক 8-বিট) এর জন্য 00100100 ; " ¢ " (দুটি 8-বিট) জন্য 11000010 10100010 ; " " (তিনটি 8-বিট) এর জন্য 11100010 10000010 10101100
  • হল UTF-16
    • অন্য একটি অক্ষর এনকোডিং
    • কোড ইউনিট 16 বিট হয়
    • ইউনিকোড এনকোড করতে এক থেকে দুটি কোড ইউনিট ব্যবহার করুন
    • " $ " (এক 16-বিট) এর জন্য 00000000 00100100 ; 11011000 01010010 11011111 01100010 " 𤭢 " এর জন্য (দুটি 16-বিট)

1
সংক্ষিপ্ত এবং সুনির্দিষ্ট
অরিত্র চ্যাটার্জি

30

ইউনিকোড একটি মোটামুটি জটিল মান। খুব ভয় পাবেন না, তবে কিছু কাজের জন্য প্রস্তুত থাকুন! [2]

কারণ একটি বিশ্বাসযোগ্য সংস্থান সর্বদা প্রয়োজন, তবে অফিসিয়াল প্রতিবেদনটি বিশাল, আমি নিম্নলিখিতটি পড়ার পরামর্শ দিচ্ছি:

  1. স্ট্যাক এক্সচেঞ্জের প্রধান নির্বাহী জোয়েল স্পলস্কির পরিচয় সর্বমোট ন্যূনতম প্রতিটি সফ্টওয়্যার বিকাশকারী অবশ্যই, ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে (ইতিমধ্যে কোনও বাহানা নেই!) অবশ্যই জেনে রাখা উচিত
  2. বিএমপি এবং এর বাইরেও! এরিক মুলার এর টিউটোরিয়াল, তৎকালীন টেকনিক্যাল ডিরেক্টর, ভাইস প্রেসিডেন্ট পরে ইউনিকোড কনসোর্টিয়ামে। (প্রথম 20 টি স্লাইড এবং আপনি শেষ করেছেন)

একটি সংক্ষিপ্ত ব্যাখ্যা:

কম্পিউটারগুলি বাইটগুলি পড়ে এবং লোকেরা অক্ষরগুলি পড়ে, তাই আমরা বাইটগুলিতে অক্ষরগুলি মানচিত্র করতে এনকোডিং মান ব্যবহার করি । এএসসিআইআই হ'ল প্রথম বহুল ব্যবহৃত স্ট্যান্ডার্ড, তবে কেবল লাতিনের (7 বিট / চরিত্রটি 128 টি বিভিন্ন চরিত্রের প্রতিনিধিত্ব করতে পারে) কভার করে। ইউনিকোড হ'ল একটি স্ট্যান্ডার্ড যা বিশ্বের সমস্ত সম্ভাব্য অক্ষরকে আচ্ছাদন করার লক্ষ্য সহ (1,114,112 অক্ষর ধরে রাখতে পারে, যার অর্থ 21 বিট / চরিত্রের সর্বাধিক। বর্তমান ইউনিকোড 8.0 মোট 120,737 অক্ষর নির্দিষ্ট করে এবং এগুলি সবই)।

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

প্রতিটি চরিত্র 0 থেকে 1,114,111 (hex: 0-10FFFF) নামক কোড পয়েন্ট হিসাবে একটি গণিত অবস্থান রাখে ।
একটি এনকোডিং ফর্ম একটি কোড ইউনিট অনুক্রমের কোড কোড মানচিত্র করে। একটি কোড ইউনিট হ'ল আপনি যেভাবে চান অক্ষরগুলিকে মেমরির সাথে সংগঠিত করতে চান, 8-বিট ইউনিট, 16-বিট ইউনিট এবং আরও। ইউটিএফ -8 8 বিটের 1 থেকে 4 ইউনিট ব্যবহার করে এবং ইউটিএফ -16 21 টি বিট সর্বাধিকের পুরো ইউনিকোডটি coverাকতে 16 বিটের 1 বা 2 ইউনিট ব্যবহার করে। ইউনিটগুলি উপসর্গগুলি ব্যবহার করে যাতে অক্ষরের সীমারেখাগুলি চিহ্নিত করা যায় এবং আরও ইউনিটগুলি বোঝায় বিটগুলি অধিকতর উপসর্গ। সুতরাং, যদিও ইউটিএফ -8 লাতিন স্ক্রিপ্টের জন্য 1 বাইট ব্যবহার করে তবে এটি বেসিক বহুভাষিক সমতলের পরবর্তী স্ক্রিপ্টগুলির জন্য 3 বাইট প্রয়োজন, যখন ইউটিএফ -16 এগুলির জন্য 2 বাইট ব্যবহার করে। এবং এটাই তাদের মূল পার্থক্য।
শেষ অবধি, একটি এনকোডিং স্কিম (UTF-16BE বা UTF-16LE এর মতো) মানচিত্রগুলি (সিরিয়ালাইজ করে) বাইট সিকোয়েন্সের কোড ইউনিট ক্রম।

অক্ষর:
point কোড পয়েন্ট: U + 03C0
এনকোডিং ফর্ম (কোড ইউনিট):
      UTF-8: CF 80
      UTF-16: 03C0
এনকোডিং স্কিম (বাইট):
      UTF-8: CF 80
      UTF-16BE: 03 C0
      UTF-16LE: C0 03

টিপ: একটি হেক্স ডিজিট 4 বিট উপস্থাপন করে, সুতরাং একটি দুই-অঙ্কের হেক্স নম্বর একটি বাইট উপস্থাপন
করে অক্ষর সেট বিন্যাসের অনুভূতি পেতে উইকিপিডিয়ায় বিমানের মানচিত্রগুলি একবার দেখুন


19

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

পরে, ইউনিকোডের ক্ষেত্রটি historicalতিহাসিক অক্ষরগুলি অন্তর্ভুক্ত করার জন্য প্রসারিত করা হয়েছিল, যার জন্য ১ 16-বিট এনকোডিং সমর্থন করবে would৫,53636 কোড পয়েন্টের বেশি প্রয়োজন। প্ল্যাটফর্মে যে অতিরিক্ত অক্ষরগুলি ইউসিএস -2 ব্যবহার করেছিল সেগুলিতে প্রতিনিধিত্ব করার অনুমতি দেওয়ার জন্য, ইউটিএফ -16 এনকোডিং চালু হয়েছিল। পরিপূরক বিমানগুলিতে অক্ষরগুলি উপস্থাপন করতে এটি "সারোগেট জোড়া" ব্যবহার করে।

এদিকে, অনেকগুলি পুরানো সফ্টওয়্যার এবং নেটওয়ার্ক প্রোটোকল 8-বিট স্ট্রিং ব্যবহার করছে। ইউটিএফ -8 তৈরি করা হয়েছিল যাতে এই সিস্টেমগুলি বিস্তৃত অক্ষর ব্যবহার না করেই ইউনিকোড সমর্থন করতে পারে। এটি 7-বিট ASCII এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ।


3
এটি লক্ষণীয় যে মাইক্রোসফ্ট ইউটিএফ -16 কে এখনও ইউনিকোড হিসাবে উল্লেখ করেছে এবং বিভ্রান্তি বাড়িয়েছে। দুটো এক নয়
মার্ক রান্সম

15

এই নিবন্ধটি সমস্ত বিবরণ ব্যাখ্যা করে: 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.

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


11

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

ইউটিএফ -8 এবং ইউটিএফ -16 এই জাতীয় দুটি এনকোডিং। তারা কোড পয়েন্টগুলি ইনপুট হিসাবে গ্রহণ করে এবং এনকোডযুক্ত স্ট্রিং উত্পাদন করতে কিছু সু-সংজ্ঞায়িত সূত্র ব্যবহার করে তাদের এনকোড করে।

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

ইউনিকোড, ইউটিএফ -8 এবং ইউটিএফ -16 সম্পর্কে আরও গভীরতার জন্য আপনি এই নিবন্ধটি পরীক্ষা করে দেখতে পারেন,

প্রতিটি প্রোগ্রামারকে ইউনিকোড সম্পর্কে কী জানা উচিত


9

ইউনিকোড কেন? কারণ ASCII এর মাত্র 127 টি অক্ষর রয়েছে। 128 থেকে 255 এর মধ্যে বিভিন্ন দেশে আলাদা হয়, এজন্যই কোডেজ রয়েছে। সুতরাং তারা বলেছে 1111111 টি পর্যন্ত অক্ষর থাকতে পারে। তাহলে আপনি কীভাবে সর্বোচ্চ কোডপয়েন্টটি সঞ্চয় করবেন? আপনাকে এটি 21 বিট ব্যবহার করে সংরক্ষণ করতে হবে, সুতরাং আপনি 11 বিট নষ্ট সহ 32 বিটযুক্ত একটি ডাবর্ডার ব্যবহার করবেন। সুতরাং আপনি যদি একটি ইউনিকোড অক্ষর সংরক্ষণ করার জন্য ডিডাবর্ড ব্যবহার করেন তবে এটি সবচেয়ে সহজ উপায় কারণ আপনার ডিডাবর্ডের মানটি কোডপয়েন্টের সাথে ঠিক মেলে। তবে DWORD অ্যারেগুলি অবশ্যই WORD অ্যারেগুলির চেয়ে বড় এবং অবশ্যই BYTE অ্যারেগুলির চেয়েও বড়। সে কারণেই কেবল ইউটিএফ -32 নয়, ইউটিএফ -16 রয়েছে। তবে ইউটিএফ -16 এর অর্থ একটি ওয়ার্ড স্ট্রিম, এবং একটি ওয়ার্ডের 16 টি বিট রয়েছে যাতে সর্বোচ্চ কোডপয়েন্ট 1114111 কীভাবে কোনও ওয়ার্ডে ফিট করতে পারে? এটা হতে পারে না! সুতরাং তারা 65535 এরও বেশি সমস্ত কিছু একটি DWORD এ রেখেছিল যা তারা একটি সারোগেট-জুটি বলে। এই জাতীয় সার্গেট-জুটি দুটি ওয়ার্ডস এবং প্রথম 6 টি বিট দেখে সনাক্ত করা যায়। তাহলে কি ইউটিএফ -8? এটি একটি বাইট অ্যারে বা বাইট স্ট্রিম, তবে কীভাবে সর্বোচ্চ কোডপয়েন্ট 1114111 বাইটে ফিট করতে পারে? এটা হতে পারে না! ঠিক আছে, তাই তারা একটি DWord ঠিক আছে? বা সম্ভবত একটি ওয়ার্ড, ডান? প্রায় ঠিক! তারা ইউটিএফ -8 সিকোয়েন্সগুলি আবিষ্কার করেছে যার অর্থ 127 এর চেয়ে বেশি প্রতিটি কোডডপয়েন্ট অবশ্যই 2 বাইট, 3 বাইট বা 4-বাইট অনুক্রমের মধ্যে এনকোড হওয়া উচিত। কি দারুন! কিন্তু কীভাবে আমরা এই জাতীয় ক্রমগুলি সনাক্ত করতে পারি? ভাল, 127 অবধি সমস্ত কিছু ASCII এবং একক বাইট। ১১০ দিয়ে যা শুরু হয় তা একটি দ্বি-বাইট অনুক্রম, ১১১০ দিয়ে যা শুরু হয় তা তিন-বাইট অনুক্রম এবং ১১১১০ দিয়ে শুরু হওয়াটি একটি চার-বাইট অনুক্রম। এই তথাকথিত "স্টার্টবাইটস" এর অবশিষ্ট বিট কোডডপয়েন্টের অন্তর্ভুক্ত। এখন ক্রম উপর নির্ভর করে নিম্নলিখিত বাইট অনুসরণ করা আবশ্যক। নিম্নলিখিত বাইটটি 10 ​​দিয়ে শুরু হয়, বাকী বিটগুলি পেডলোড বিটের 6 টি বিট এবং কোডপয়েন্টের অন্তর্ভুক্ত। স্টার্টবাইট এবং নিম্নলিখিত বাইট / গুলি এর পেডলোড বিটগুলি সংঘবদ্ধ করুন এবং আপনার কোডপয়েন্ট থাকবে। এটাই ইউটিএফ -8 এর যাদু।


3
utf-8 f (ইউরো) চিহ্নটি ইউটিএফ -8 3-বাইট অনুক্রমে ডিকোড হয়েছে: E2 = 11100010 82 = 10000010 এসি = 10101100 আপনি দেখতে পাচ্ছেন, E2 1110 দিয়ে শুরু হয় সুতরাং এটি একটি তিন-বাইট অনুক্রম হিসাবে আপনি দেখতে পাচ্ছেন , ৮২ এর পাশাপাশি এসি 10 দিয়ে শুরু হয় তাই এগুলি বাইটগুলি অনুসরণ করছে এখন আমরা "পেওলড বিটগুলি" কনটেনেট করি: 0010 + 000010 + 101100 = 10000010101100 যা দশমিক 8364 সুতরাং 8364 ডলার (ইউরো) চিহ্নের কোড কোড হতে হবে be
উজ্জ্বল

5

এএসসিআইআই - সফ্টওয়্যার প্রদত্ত চরিত্রের জন্য মেমরিতে কেবল 8 বিট বাইট বরাদ্দ করে। এটি ইংরাজী এবং গৃহীত (ফ্যাডের মতো লোনওয়ার্ড) অক্ষরের জন্য ভাল কাজ করে কারণ তাদের সম্পর্কিত দশমিক মান দশমিক মানের নীচে 128 এর নিচে নেমে আসে। সি প্রোগ্রাম উদাহরণ।

ইউটিএফ -8 - সফ্টওয়্যার প্রদত্ত চরিত্রের জন্য 1 থেকে 4 ভেরিয়েবল 8 বিট বাইট বরাদ্দ করে। এখানে পরিবর্তনশীল বলতে কী বোঝায়? আমাদের বলুন যে আপনি ব্রাউজারে আপনার HTML পৃষ্ঠাগুলির মাধ্যমে 'এ' অক্ষরটি প্রেরণ করছেন (এইচটিএমএলটি ইউটিএফ -8), এ এর ​​সাথে সম্পর্কিত দশমিক মান 65 হয়, আপনি যখন এটি দশমিক রূপান্তর করেন তখন এটি 01000010 হয় This এর জন্য কেবল 1 বাইট দরকার , 1 বাইট মেমরি এমনকি 'শ' শব্দটির জন্য 'adopted' এর মতো বিশেষ গৃহীত ইংরেজি অক্ষরের জন্যও বরাদ্দ করা হয়। যাইহোক, আপনি যখন ইউরোপীয় অক্ষরগুলি সঞ্চয় করতে চান তখন এটিতে 2 বাইট প্রয়োজন, তাই আপনার ইউটিএফ -8 প্রয়োজন। তবে, আপনি যখন এশিয়ান অক্ষরগুলির জন্য যান, আপনার সর্বনিম্ন 2 বাইট এবং সর্বাধিক 4 বাইট প্রয়োজন। একইভাবে, ইমোজিগুলির 3 থেকে 4 বাইট প্রয়োজন। ইউটিএফ -8 আপনার সমস্ত প্রয়োজন সমাধান করবে।

ইউটিএফ -16 সর্বনিম্ন 2 বাইট এবং সর্বোচ্চ চার বাইট অক্ষর বরাদ্দ করবে, এটি 1 বা 3 বাইট বরাদ্দ করবে না। প্রতিটি অক্ষর হয় 16 বিট বা 32 বিট উপস্থাপন করা হয়।

তাহলে ইউটিএফ -16 কেন বিদ্যমান? মূলত, ইউনিকোড ছিল 16 বিট নয় 8 বিট। জাভা ইউটিএফ -16 এর মূল সংস্করণ গ্রহণ করেছে।

সংক্ষেপে, আপনি যে ভাষা বা প্ল্যাটফর্মটিতে কাজ করছেন সেটি ইতিমধ্যে গ্রহণ না করা অবধি আপনার কোথাও ইউটিএফ -16 লাগবে না।

ওয়েব ব্রাউজারগুলির দ্বারা প্রবর্তিত জাভা প্রোগ্রামটি ইউটিএফ -16 ব্যবহার করে তবে ওয়েব ব্রাউজারটি ইউটিএফ -8 ব্যবহার করে অক্ষর প্রেরণ করে।


"ভাষা বা প্ল্যাটফর্ম দ্বারা এটি ইতিমধ্যে গৃহীত না হলে আপনার আর কোথাও ইউটিএফ -১ need লাগবে না": এটি একটি ভাল বিষয় তবে এখানে একটি অন্তর্ভুক্তিকৃত তালিকা নেই: জাভাস্ক্রিপ্ট, জাভা, নেট, এসকিউএল এনসিএআর, এসকিউএল এনভিচারার , ভিবি 4, ভিবি 5, ভিবি 6, ভিবিএ, ভিবিএস স্ক্রিপ্ট, এনটিএফএস, উইন্ডোজ এপিআই…।
টম ব্লডজেট

2

ইউটিএফ এর অর্থ দাঁড়ায় ইউনিকোড ট্রান্সফর্মেশন ফর্ম্যাট B মূলত আজকের বিশ্বে অন্যান্য শত শত ভাষায় লিখিত স্ক্রিপ্ট রয়েছে, ফর্ম্যাটগুলি আগে ব্যবহৃত বেসিক ASCII দ্বারা আচ্ছাদিত নয়। অতএব, ইউটিএফ অস্তিত্ব নিয়ে আসে।

ইউটিএফ -8 এর অক্ষর এনকোডিং ক্ষমতা রয়েছে এবং এর কোড ইউনিট 8 টি বিট রয়েছে যখন ইউটিএফ -16 এর জন্য এটি 16 বিট।

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