একটি ইউনিকোড চরিত্রটি কতগুলি বাইট নেয়?


239

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

আমি ধরে নিয়েছি যে একটি ইউনিকোড অক্ষর যে কোনও ভাষা থেকে প্রতিটি সম্ভাব্য চরিত্র ধারণ করতে পারে - আমি কি সঠিক? সুতরাং চরিত্র অনুযায়ী এটি কত বাইট প্রয়োজন?

এবং ইউটিএফ -7, ইউটিএফ -6, ইউটিএফ -16 ইত্যাদির অর্থ কী? এগুলি কি ইউনিকোডের বিভিন্ন সংস্করণ?

আমি ইউনিকোড সম্পর্কে উইকিপিডিয়া নিবন্ধটি পড়েছি তবে এটি আমার পক্ষে বেশ কঠিন। আমি একটি সহজ উত্তর দেখার জন্য অপেক্ষা করছি।



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

12
"সাধারণ উত্তর": একটি ইউনিকোড চরিত্রটি 1-4 বাইট নেয়। ইউনিকোড অনেকগুলি ভাষা জুড়ে তবে সমস্তটি নয়। গতবার আমি দেখেছিলাম, উদাহরণস্বরূপ ক্লিংগন অফিসিয়াল ইউনিকোড চরিত্রের সেট ছিলেন না।
পিটার জি।

9
ক্লিঙ্গন নিজেই ইউনিকোড স্ট্যান্ডার্ডের অংশ নন, না। এটি ইউনোডের ব্যক্তিগত ব্যবহারের অঞ্চল (U + F8D0 - U + F8FF) এর পরিবর্তে ব্যবহার করে।
রেমি লিবিউ

1
উদ্ধারকারী প্রশ্ন - ধন্যবাদ আমার পরিস্থিতি এসসিওআরএম ১.২ অনুবর্তী এলএমএসের মাধ্যমে ডেটা সংরক্ষণ করছে ... এসসিওআরএম 1.2 'সিএমআই.সেসপেন্ড_ডাটা' এর মান 4096 বাইটের ডেটা যা পূর্ববর্তী বিকাশকারী ধরে নিয়েছিল আমরা 4096 অক্ষর সংরক্ষণ করতে পারি। ওহ মানুষ সে কি ভুল ছিল - আমি কেবল খুঁজে পেয়েছি কেন আমাদের বুকমার্কিং দীর্ঘ কোর্সে ব্যর্থ হয়। সুতরাং এখন আমি জানি যেহেতু আমরা ইউটিএফ -8 ব্যবহার করছি এটির জন্য অক্ষর প্রতি 4 বাইট লাগে 1024 অক্ষর।
ডানজাহ

উত্তর:


147

আপনি একটি সহজ উত্তর দেখতে পাবেন না কারণ একটি উত্তর নেই।

প্রথমত, ইউনিকোডে "প্রতিটি ভাষা থেকে প্রতিটি চরিত্র" থাকে না, যদিও এটি নিশ্চিতভাবে চেষ্টা করে।

ইউনিকোড নিজেই একটি ম্যাপিং, এটি কোডপয়েন্টগুলি সংজ্ঞা দেয় এবং কোডপয়েন্ট একটি সংখ্যা যা সাধারণত একটি চরিত্রের সাথে যুক্ত । আমি সাধারণত বলি কারণ অক্ষরগুলির সংমিশ্রণের মতো ধারণা রয়েছে। আপনি অ্যাকসেন্ট বা আমলেট জাতীয় জিনিসগুলির সাথে পরিচিত হতে পারেন। এগুলি অন্য একটি চরিত্রের সাথে ব্যবহার করা যেতে পারে যেমন একটি নতুন লজিকাল চরিত্র তৈরি করতে একটি aবা একটি u। একটি অক্ষর তাই 1 বা আরও কোডপয়েন্ট নিয়ে গঠিত হতে পারে।

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

অক্ষরগুলির সংমিশ্রনের নমনীয়তার কারণে এমনকি কোনও প্রদত্ত এনকোডিংয়ের মধ্যেও অক্ষর প্রতি বাইটের সংখ্যা অক্ষর এবং স্বাভাবিককরণের ফর্মের উপর নির্ভর করে পরিবর্তিত হতে পারে। এটি এমন চরিত্রগুলির সাথে ডিল করার জন্য যা একটির অধিক উপস্থাপনা রয়েছে (আপনি বলতে পারেন যে "an 'a' with an accent"2 কোডপয়েন্ট রয়েছে যার মধ্যে একটি সমন্বয় চর বা "accented 'a'"যা একটি কোডপয়েন্ট)।


1
ঠিক আছে. তারপরে একটি প্রদত্ত কোডপয়েন্টে প্রতিনিধিত্ব করা একটি বর্ণকে কতগুলি বাইট নেয়? উদাহরণস্বরূপ, অবিচ্ছেদী স্থান
নিকোলাস বারবুলেসকো

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

আমি একটি ডেমো লিখেছিলাম যা উইন্ডোজ -1222, ইউটিএফ 8 এবং ইউটিএফ 8-বিওএম এনকোডযুক্ত
ভ্লাদ

195

আশ্চর্যের বিষয় যথেষ্ট, কেউ কীভাবে ইউনিকোডের চারটি বাইট নিচ্ছে তা গণনা করতে হবে তা নির্দেশ করে নি। ইউটিএফ -8 এনকোডযুক্ত স্ট্রিংয়ের নিয়ম এখানে রয়েছে:

Binary    Hex          Comments
0xxxxxxx  0x00..0x7F   Only byte of a 1-byte character encoding
10xxxxxx  0x80..0xBF   Continuation byte: one of 1-3 bytes following the first
110xxxxx  0xC0..0xDF   First byte of a 2-byte character encoding
1110xxxx  0xE0..0xEF   First byte of a 3-byte character encoding
11110xxx  0xF0..0xF7   First byte of a 4-byte character encoding

সুতরাং দ্রুত উত্তরটি হ'ল: 1 থেকে 4 বাইট লাগবে, প্রথমটির উপর নির্ভর করে এটি নির্দেশ করবে যে এটি কত বাইট গ্রহণ করবে।


8
আমি বিশ্বাস করি 4 বাইট অক্ষরের সর্বোচ্চ হেক্স মান 0xF7 (0xF4 নয়)।
ডিজেপিজে

তোমাকে অনেক ধন্যবাদ! আইইটিএফ স্ট্যান্ডার্ডের মাধ্যমে আমি কেবল নিয়ন্ত্রণ + ফাইং করেছি, এবং আমি এনকোডিংয়ের বিষয়ে কিছুই পাইনি এবং আমি যে নিবন্ধটি পড়ছিলাম তা পিছনে কোডের সংখ্যার প্রতিনিধিত্ব করতে কত বিট ব্যবহৃত হয় তা জানাতে পর্যাপ্ত বিশদে যায়নি প্রতি "চরিত্র" পয়েন্ট।
মারকাসজে

1
এটি এখন আমার "নতুন দলের সদস্যদের জন্য পরিচিতি" এর প্রতারণার দ্বিতীয় পৃষ্ঠায়, হাস্যকর প্রথম দুটি মন্তব্য সহ
সিই ম্যাকশারফেস

1
0xF4 ভুল ছিল না তবে একটি ব্যাখ্যা ছিল। ইউনিকোড কোডপয়েন্টগুলি 0-0x10ffff সীমার মধ্যে থাকে তাই শেষ কোডপয়েন্টটি এফ 4 8 এফ বিএফ বিএফ হিসাবে কোডেড হয়।
ফ্রেডিয়ানো জিগলিও

38

আমি জানি এই প্রশ্নটি পুরানো এবং ইতিমধ্যে একটি স্বীকৃত উত্তর রয়েছে, তবে আমি কয়েকটি উদাহরণ দিতে চাই (আশা করি এটি কারওর পক্ষে কার্যকর হবে)।

আমি যতদূর জানি পুরানো এএসসিআইআই চরিত্রগুলি প্রতিটি চরিত্রের জন্য একটি বাইট নিয়েছিল।

ঠিক। আসলে, যেহেতু এএসসিআইআই 7-বিট এনকোডিং, তাই এটি 128 কোডগুলি (যার মধ্যে 95 টি মুদ্রণযোগ্য) সমর্থন করে, সুতরাং এটি কেবলমাত্র অর্ধ বাইট ব্যবহার করে (যদি এটি কোনও ধারণা দেয়)।

একটি ইউনিকোড চরিত্রের কতটি বাইট প্রয়োজন?

ইউনিকোড কেবল কোডপয়েন্টগুলিতে অক্ষরগুলি মানচিত্র করে। এটি কীভাবে এনকোড করা যায় তা নির্ধারণ করে না। একটি পাঠ্য ফাইলে ইউনিকোড অক্ষর থাকে না, তবে বাইটস / অকটেটগুলি ইউনিকোড অক্ষরকে উপস্থাপন করতে পারে।

আমি ধরে নিয়েছি যে একটি ইউনিকোড অক্ষর যে কোনও ভাষা থেকে প্রতিটি সম্ভাব্য চরিত্র ধারণ করতে পারে - আমি কি সঠিক?

না, তবে প্রায়। তাই মূলত হ্যাঁ কিন্তু এখনও নেই।

সুতরাং চরিত্র অনুযায়ী এটি কত বাইট প্রয়োজন?

আপনার দ্বিতীয় প্রশ্ন হিসাবে একই।

এবং ইউটিএফ -7, ইউটিএফ -6, ইউটিএফ -16 ইত্যাদি কী বোঝায়? তারা কি কোনও ধরণের ইউনিকোড সংস্করণ রয়েছে?

না, সেগুলি এনকোডিং। এগুলি সংজ্ঞায়িত করে যে কীভাবে বাইটস / অক্টেটগুলি ইউনিকোড অক্ষর উপস্থাপন করতে পারে।

উদাহরণ দুটি। যদি তাদের মধ্যে কিছু আপনার ব্রাউজারে প্রদর্শিত না হতে পারে (সম্ভবত ফন্টগুলি তাদের সমর্থন করে না), একটি চিত্র দেখতে http://codepoints.net/U+1F6AA( 1F6AAহেক্সে কোডপয়েন্টের সাথে প্রতিস্থাপন করুন) যান ।

    • U + 0061 ল্যাটিন ছোট ছোট একটি: a
      • Nº: 97
      • ইউটিএফ -8: 61
      • ইউটিএফ -16: 00 61
    • U + 00A9 কপিরাইট সাইন: ©
      • Nº: 169
      • ইউটিএফ -8: সি 2 এ 9
      • ইউটিএফ -16: 00 এ 9
    • U + 00AE নিবন্ধিত সাইন: ®
      • Nº: 174
      • ইউটিএফ -8: সি 2 এই
      • ইউটিএফ -16: 00 এই
    • ইউ + 1337 এথিয়পিক সিলিবেল PHWA:
      • Nº: 4919
      • ইউটিএফ -8: ই 1 8 সি বি 7
      • ইউটিএফ -16: 13 37
    • U + 2014 ইম ড্যাশ:
      • Nº: 8212
      • ইউটিএফ -8: ই 2 80 94
      • ইউটিএফ -16: 20 14
    • U + 2030 পারের মিল সাইন:
      • Nº: 8240
      • ইউটিএফ -8: ই 2 80 বি 0
      • ইউটিএফ -16: 20 30
    • U + 20AC ইউরো স্বাক্ষর:
      • Nº: 8364
      • ইউটিএফ -8: ই 2 82 এসি
      • ইউটিএফ -16: 20 এসি
    • U + 2122 ট্রেড মার্ক সাইন:
      • Nº: 8482
      • ইউটিএফ -8: E2 84 এ 2
      • UTF-16: 21 22
    • ইউ + 2603 স্নোম্যান:
      • Nº: 9731
      • ইউটিএফ -8: E2 98 83
      • ইউটিএফ -16: 26 03
    • U + 260E কালো টেলিফোন:
      • Nº: 9742
      • ইউটিএফ -8: E2 98 8E
      • ইউটিএফ -16: 26 0 ই
    • বৃষ্টিপাতের সাথে ইউ + 2614 আমব্রেলা:
      • Nº: 9748
      • ইউটিএফ -8: ই 2 98 94
      • ইউটিএফ -16: 26 14
    • U + 263A সাদা স্মাইলিং ফ্যাক্স:
      • Nº: 9786
      • ইউটিএফ -8: E2 98 বিএ
      • ইউটিএফ -16: 26 3 এ
    • U + 2691 কালো পতাকা:
      • Nº: 9873
      • ইউটিএফ -8: ই 2 9 এ 91
      • ইউটিএফ -16: 26 91
    • ইউ + 269 বি এটম সিমবোল:
      • Nº: 9883
      • ইউটিএফ -8: ই 2 9 এ 9 বি
      • ইউটিএফ -16: 26 9 বি
    • U + 2708 আকাশপথ:
      • Nº: 9992
      • ইউটিএফ -8: ই 2 9 সি 88
      • ইউটিএফ -16: 27 08
    • ইউ + 271E সাদা শ্বেত ল্যাটিন ক্রস:
      • Nº: 10014
      • ইউটিএফ -8: E2 9C 9E
      • UTF-16: 27 1E
    • U + 3020 পোস্টাল মার্ক ফ্যাক্স:
      • Nº: 12320
      • ইউটিএফ -8: E3 80 এ 0
      • ইউটিএফ -16: 30 20
    • U + 8089 সিজেকে ইউনিফাইড আইডিয়াগ্রাফ -8089
      • Nº: 32905
      • ইউটিএফ -8: E8 82 89
      • ইউটিএফ -16: 80 89
    • ইউ + 1F4A9 পাই এর পাইল: 💩
      • Nº: 128169
      • UTF-8: F0 9F 92 A9
      • ইউটিএফ -16: ডি 8 ডি ডিসি এ 9
    • U + 1F680 রকেট: 🚀
      • Nº: 128640
      • ইউটিএফ -8: এফ 0 9 এফ 9 এ 80
      • ইউটিএফ -16: ডি 8 ডি ডিই 80

ঠিক আছে আমি বহন করছি ...

মজার ঘটনা:


কোড ইউনিট হল UTF-16 16 বিট চওড়া। আপনি তাদের মাঝখানে একটি জায়গা দিয়ে দেখিয়েছেন যা বিভ্রান্তিমূলক। T এর জন্য UTF-16 উপস্থাপনের 00A9পরিবর্তে হওয়া উচিত 00 A9(যা UTF-16BE হবে)।
রোল্যান্ড ইলিগ

পার্থক্য কি? বড় এন্ডিয়ানদের জন্য দাঁড়ানো হবে না? তিনি এটি বড় এন্ডিয়ান ভাষায় লিখেছেন, এবং তাই বড় এন্ডিয়ান ইউটিএফ -16 এ লিখিত কোনও ফাইল ইউটিএফ -16 বিই এর মতো হবে, তাই না?
হ্যাপিপান্ডাফেরিক্স

6
সংশোধন: 1) এএসসিআইআই 7 বিট, একটি বাইট 8 বিট, তাই এটি অর্ধেকের চেয়ে অনেক বেশি। 2) ইউনিকোড কোড পয়েন্টগুলি কীভাবে এনকোড করতে হয় তা নির্ধারণ করে। ইউটিএফ -8, ইউটিএফ -16 এবং ইউটিএফ -32 ইউনিকোড স্ট্যান্ডার্ডে সংজ্ঞায়িত হয়েছে।
জোনাথন রোজেন

3
@ জোনাথনরোসনে আমার মনে হয় তিনি / তার অর্থ এটি কেবলমাত্র 8 টি বিট দিয়ে উপস্থাপনযোগ্য সম্ভাব্য মানের অর্ধেক ব্যবহার করে, এটি নয় যে এটি বিটের অর্ধেক ব্যবহার করে।
আরিটজ লোপেজ

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

29

সহজ ভাষায় Unicodeবলা একটি মান যা বিশ্বের সমস্ত চরিত্রকে একটি নম্বর (কোড পয়েন্ট বলে) নির্ধারিত করে (এটি এখনও প্রগতিতে কাজ করে)।

এখন আপনাকে এই কোড পয়েন্টগুলি উপস্থাপন করতে হবে বাইটস ব্যবহার করে, বলা হয় character encodingUTF-8, UTF-16, UTF-6এই চরিত্রগুলি উপস্থাপন করার উপায়।

UTF-8মাল্টিবাইট চরিত্রের এনকোডিং। অক্ষরগুলিতে 1 থেকে 6 বাইট থাকতে পারে (তাদের মধ্যে এখনই কিছু প্রয়োজন হতে পারে না)।

UTF-32 প্রতিটি অক্ষর 4 টি বাইট একটি অক্ষর আছে।

UTF-16প্রতিটি চরিত্রের জন্য 16 টি বিট ব্যবহার করা হয় এবং এটি ইউনিকোড অক্ষরগুলির কেবলমাত্র অংশকে বিএমপি নামে প্রতিনিধিত্ব করে (সমস্ত ব্যবহারিক উদ্দেশ্যে এটি যথেষ্ট)। জাভা এই স্ট্রিংগুলিতে এই এনকোডিংটি ব্যবহার করে।


10
ইউনিকোড একটি 21-বিট কোড সেট এবং 4 টি বাইট ইউটিএফ -8-তে যে কোনও ইউনিকোড চরিত্রের প্রতিনিধিত্ব করতে যথেষ্ট। ইউটিএফ -16 বিএমপির বাইরের অক্ষরের প্রতিনিধিত্ব করতে সার্জেট ব্যবহার করে (বেসিক বহুভাষিক বিমান); কোনও বৈধ ইউনিকোড চরিত্র উপস্থাপনের জন্য এটি 2 বা 4 বাইট প্রয়োজন। ইউএমএস -2 বিএমপির বাইরে সারোগেটস বা অক্ষরগুলির সমর্থন ছাড়াই কেবল ইউটিএফ -16 এর 16-বিট বৈকল্পিক ছিল।
জোনাথন লেফলার

1
আপনি সঠিক. ইউটিএফ -8 আসলটির 32 টি বিট থাকার জন্য 6 বাইট ছিল। উইকি ডক নিয়ে তিনি ইতিমধ্যে বিভ্রান্ত হয়ে পড়েছিলেন বলে আমি আসলে জিনিসগুলিকে জটিল করতে চাইনি :)
জিম্বাবাও

3
এই উত্তরে বলা হয়েছে যে ইউটিএফ -16 বিএমপি কোড পয়েন্টগুলি এনকোড করতে পারে না। এটি ভুল, কারণ এগুলি সার্টিগেট জোড়া ব্যবহার করে ইউটিএফ -8 এ পারে ঠিক তেমন এনকোড করা যেতে পারে। (ইউনিকোড ২.০ বের হওয়ার আগে আপনি অবশ্যই পুরানো ইউসিএস -২ এর কথা ভাবছেন, যা কেবল ১ 16-বিট কোড পয়েন্টকে এনকোড করেছে।) এছাড়াও, জাভা ইউটিএফ -১-ব্যবহার করে না, এটি একটি পরিবর্তিত ফর্ম ব্যবহার করে যেখানে কোড পয়েন্ট 0 আলাদাভাবে এনকোড করা হয়।
rdb

@ আরডিবি - এটি বিপরীত। উত্তরটি বলে যে ইউটিএফ -16 বিএমপির প্রতিনিধিত্ব করে।
নিকোলাস বারবুলেসকো

3
আমি ভুল টাইপ করেছি; আমি "বি-বিএমপি" বলতে চাইছিলাম। উত্তরের ত্রুটিটি হ'ল এটি বলে যে UTF-16 BMP অক্ষরকে উপস্থাপন করে যা ভুল। ইউটিএফ -16 সমস্ত ইউনিকোড অক্ষর এনকোড করতে পারে - নন-বিএমপি অক্ষরগুলি সারোগেট জোড়াগুলির মাধ্যমে এনকোড করা হয়। সম্ভবত উত্তরদাতা ইউসিএস -২ এর সাথে বিভ্রান্ত হয়েছিল।
rdb

17

ইউটিএফ -8 এ:

1 byte:       0 -     7F     (ASCII)
2 bytes:     80 -    7FF     (all European plus some Middle Eastern)
3 bytes:    800 -   FFFF     (multilingual plane incl. the top 1792 and private-use)
4 bytes:  10000 - 10FFFF

ইউটিএফ -16 এ:

2 bytes:      0 -   D7FF     (multilingual plane except the top 1792 and private-use )
4 bytes:   D800 - 10FFFF

ইউটিএফ -32 এ:

4 bytes:      0 - 10FFFF

10FFFF হ'ল সংজ্ঞা অনুসারে সর্বশেষ ইউনিকোড কোডপয়েন্ট এবং এটি সেইভাবে সংজ্ঞায়িত করা হয় কারণ এটি ইউটিএফ -16 এর প্রযুক্তিগত সীমা।

এটি ইউটিএফ -8 4 টি বাইটে এনকোড করতে পারে বৃহত্তম কোডডওন্ট, তবে ইউটিএফ -8 এর এনকোডিংয়ের পিছনে ধারণাটি 7FFFFFFF পর্যন্ত কোডপয়েন্টগুলি কভার করতে 5 এবং 6 বাইট এনকোডিংয়ের জন্যও কাজ করে। ইউটিএফ -32 যা করতে পারে তার অর্ধেক।


8

ইউনিকোডে উত্তর সহজে দেওয়া হয় না। সমস্যাটি, যেমন আপনি ইতিমধ্যে উল্লেখ করেছেন, হ'ল এনকোডিংগুলি।

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

একমাত্র এনকোডিং যেখানে (এখন অবধি) আকারটি সম্পর্কে বিবৃতিটি ইউটিএফ -32 is চরিত্রের জন্য এটি সর্বদা 32 বিট থাকে, যদিও আমি কল্পনা করি যে কোড পয়েন্টগুলি ভবিষ্যতের ইউটিএফ -৪ for জন্য প্রস্তুত রয়েছে :)

কমপক্ষে দুটি জিনিস হ'ল এটিকে এতটা কঠিন করে তোলে:

  1. রচিত অক্ষর, যেখানে ইতিমধ্যে উচ্চারণ / ডায়াক্রিটিক (À) অক্ষর সত্তা ব্যবহার করার পরিবর্তে, একজন ব্যবহারকারী উচ্চারণ এবং বেস অক্ষর (`A) একত্রিত করার সিদ্ধান্ত নিয়েছে।
  2. কোড পয়েন্ট কোড পয়েন্টগুলি এমন পদ্ধতি যা ইউটিএফ-এনকোডিংগুলি বিটের সংখ্যার চেয়ে বেশি এনকোড করার অনুমতি দেয় যা তাদের নাম দেয় যা সাধারণত তাদের অনুমতি দেয়। উদাহরণস্বরূপ UTF-8 নির্দিষ্ট বাইটগুলি তাদের নিজস্ব যা অবৈধ হিসাবে মনোনীত করে, তবে একটি বৈধ ধারাবাহিকতা বাইট অনুসরণ করলে 0-255 এর 8-বিটের পরিসীমা অতিক্রম করে একটি চরিত্র বর্ণনা করতে দেয়। দেখুন উদাহরণ হল UTF-8 উইকিপিডিয়ার নিবন্ধে নিচে এবং সুদীর্ঘ এনকোডিংসমূহের।
    • সেখানে দেওয়া দুর্দান্ত উদাহরণটি হ'ল € অক্ষর (কোড পয়েন্টটি তিন-বাইট ক্রম বা চার-বাইট অনুক্রম U+20ACহিসাবে উপস্থাপিত হতে পারে) ।E2 82 ACF0 82 82 AC
    • উভয়ই বৈধ, এবং এটি ইউনিকোডের নির্দিষ্ট এনকোডিং যেমন ইউটিএফ -8 বা ইউটিএফ -16 সম্পর্কে নয়, "ইউনিকোড" সম্পর্কে কথা বলার সময় উত্তরটি কত জটিল তা দেখায়।


4

ঠিক আছে, আমি এটিতে উইকিপিডিয়া পৃষ্ঠাটিও টেনে এনেছি এবং ইন্ট্রো অংশে আমি দেখেছি "ইউনিকোড বিভিন্ন চরিত্রের এনকোডিং দ্বারা প্রয়োগ করা যেতে পারে The সর্বাধিক ব্যবহৃত এনকোডিংগুলি ইউটিএফ -8 (যা কোনও এসসিআইআই অক্ষরের জন্য একটি বাইট ব্যবহার করে, ইউটিএফ -8 এবং এএসসিআইআই উভয় এনকোডিংয়ে একই কোডের মানগুলি এবং অন্যান্য অক্ষরের জন্য চারটি বাইট পর্যন্ত), এখন অপ্রচলিত ইউসিএস -2 (যা প্রতিটি অক্ষরের জন্য দুটি বাইট ব্যবহার করে তবে বর্তমান ইউনিকোড স্ট্যান্ডার্ডের প্রতিটি অক্ষরকে এনকোড করতে পারে না) "

এই উক্তিটি যেমনটি দেখায়, আপনার সমস্যাটি হ'ল আপনি ধরে নিচ্ছেন যে ইউনিকোড হ'ল অক্ষরগুলির একক উপায় single ইউনিকোডের প্রকৃতপক্ষে একাধিক ফর্ম রয়েছে এবং আবার সেই উদ্ধৃতিতে, তাদের মধ্যে একটিতে এমনকি আপনার ব্যবহারের মতো অক্ষর প্রতি 1 বাইট রয়েছে।

সুতরাং আপনার সহজ উত্তর যা আপনি চান তা হ'ল এটি পরিবর্তিত হয়।


3

ইউটিএফ -১ For এর জন্য, 0xD800 বা তার চেয়ে বড় দিয়ে শুরু হলে চরিত্রটির চারটি বাইট (দুটি কোড ইউনিট) প্রয়োজন; এই জাতীয় চরিত্রটিকে "সারোগেট জুটি" বলা হয়। আরও সুনির্দিষ্টভাবে, একটি সারোগেট জুটির ফর্ম রয়েছে:

[0xD800 - 0xDBFF]  [0xDC00 - 0xDFF]

যেখানে [...] প্রদত্ত ব্যাপ্তি সহ একটি দ্বি-বাইট কোড ইউনিট নির্দেশ করে। যে কোনও কিছু <= 0xD7FF হ'ল একটি কোড ইউনিট (দুটি বাইট)। যে কোনও কিছুই> = 0xE000 অবৈধ (বিওএম চিহ্নিতকারী ব্যতীত) is

দেখুন http://unicodebook.readthedocs.io/unicode_encodings.html , বিভাগ 7.5।


1

এই ইউনিকোড কোড রূপান্তরকারী পরীক্ষা করে দেখুন । উদাহরণস্বরূপ, প্রবেশ করুন 0x2009, যেখানে ২০০৯ হল "0x ... স্বরলিপি" ক্ষেত্রে, পাতলা জায়গার জন্য ইউনিকোড নম্বর এবং কনভার্ট ক্লিক করুন। হেক্সাডেসিমাল সংখ্যা E2 80 89(3 বাইট) "ইউটিএফ -8 কোড ইউনিট" ক্ষেত্রে প্রদর্শিত হবে।


1

উইকি থেকে:

ইউটিএফ -8, একটি 8-বিট ভেরিয়েবল-প্রস্থের এনকোডিং যা এএসসিআইআইয়ের সাথে সামঞ্জস্যতা সর্বাধিক করে তোলে;

ইউটিএফ -16, একটি 16-বিট, ভেরিয়েবল-প্রস্থের এনকোডিং;

ইউটিএফ -32, একটি 32-বিট, স্থির-প্রস্থের এনকোডিং।

এই তিনটি সর্বাধিক জনপ্রিয় বিভিন্ন এনকোডিং।

  • ইউটিএফ -8 এ প্রতিটি অক্ষর 1 থেকে 4 বাইটে প্রবেশ করা হয় (প্রভাবশালী এনকোডিং)
  • ইউটিএফ 16 এ প্রতিটি অক্ষর 1 থেকে দুটি 16-বিট শব্দের সাথে এনকোড করা হয়েছে এবং
  • ইউটিএফ -32 এ প্রতিটি অক্ষর একক 32-বিট শব্দ হিসাবে এনকোড করা আছে।

1

Unicodeএকটি মান যা প্রতিটি চরিত্রের জন্য একটি অনন্য নম্বর সরবরাহ করে। এই অনন্য সংখ্যাগুলিকে পৃথিবীতে code pointবিদ্যমান সমস্ত চরিত্রগুলিতে (যা কেবলমাত্র অনন্য কোড) বলা হয় (কিছু এখনও যোগ করা বাকি)।

বিভিন্ন উদ্দেশ্যে, আপনার code pointsএটি বাইটে উপস্থাপন করার প্রয়োজন হতে পারে (বেশিরভাগ প্রোগ্রামিং ভাষাগুলি এমন করে) এবং এখানে Character Encodingকিক্স ইন রয়েছে।

UTF-8, UTF-16, UTF-32এবং তাই সব Character Encodings, এবং ইউনিকোড এর কোড পয়েন্ট বিভিন্ন উপায়ে এই এনকোডিং মধ্যে প্রতিনিধিত্ব করা হয়।


UTF-8 এনকোডিংয়ের একটি ভেরিয়েবল-প্রস্থের দৈর্ঘ্য রয়েছে এবং এর মধ্যে এনকোডযুক্ত অক্ষরগুলি 1 থেকে 4 বাইট অন্তর্ভুক্ত করতে পারে;

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

UTF-32 নির্দিষ্ট দৈর্ঘ্য রয়েছে এবং প্রতিটি চরিত্রের ঠিক 4 বাইট (32 বিট) লাগে।

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