ইউটিএফ -8 কেন এর এনকোডিংয়ে বেশ কয়েকটি বিট নষ্ট করে


17

উইকিপিডিয়া নিবন্ধ অনুসারে , ইউটিএফ -8 এর এই ফর্ম্যাটটি রয়েছে:

প্রথম কোড শেষ কোড বাইট বাইট 1 বাইট 2 বাইট 3 বাইট 4
পয়েন্ট পয়েন্ট ব্যবহৃত
ইউ +0000 ইউ + 007F 1 0XXXXXx
ইউ + 0080 ইউ + 07 এফএফ 2 110 এমএক্সএক্সএক্সএক্স 10 এক্সএক্সএক্সএক্সএক্সএক্স
ইউ + 0800 ইউ + এফএফএফএফ 3 1110XXX 10XXXX 10xxxxxx xx
ইউ + 10000 ইউ + 1 এফএফএফএফএফ 4 11110xxx 10XXXX 10XXXX 10xxxxxx
এক্স মানে এই বিটটি কোড পয়েন্ট নির্বাচন করতে ব্যবহৃত হয়।

এটি প্রতিটি ধারাবাহিকতা বাইটে দুটি বিট এবং প্রথম বাইটে এক বিট অপচয় করে। ইউটিএফ -8 নীচের মতো এনকোড করা হয় না কেন?

প্রথম কোড শেষ কোড বাইট বাইট 1 বাইট 2 বাইট 3
পয়েন্ট পয়েন্ট ব্যবহৃত
ইউ +0000 ইউ + 007F 1 0XXXXXx
ইউ + 0080 ইউ + 3 এফএফএফ 2 10 এমএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স
ইউ + 0800 ইউ + 1 এফএফএফএফএফ 3 110 এমএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স

বেসিক বহুভাষিক প্লেনের বাইরে কোড পয়েন্ট বা কোড পয়েন্টের সীমা [U + 800, U + 3FFF] এর বাইরে থাকলে এটি একটি বাইট সংরক্ষণ করতে পারে।

ইউটিএফ -8 কেন আরও কার্যকর উপায়ে এনকোড করা হয়নি?


3
cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt আপনার প্রস্তাবিত এনকোডিংটি মূল এফএসএস / ইউটিএফ প্রস্তাবের অনুরূপ। কেন থম্পসন এবং রব পাইক স্ব-সিঙ্ক্রোনাইজিং সম্পত্তি চেয়েছিলেন।
নিনজালজ

4
এছাড়াও, আপনার এনকোডিংটি গ্যারান্টিযুক্ত বলে মনে হয় না যে ASCII কোড মানগুলি AS-অবিরত অক্ষরের জন্য উপস্থাপনের কোনও অংশে উপস্থিত হবে না। এফএসএস / ইউটিএফ এবং ইউটিএফ -8 লিগ্যাসি প্রোগ্রামগুলির সাথে কাজ করার জন্য ডিজাইন করা হয়েছে, (যেমন: এএসসিআইআইএল এবং স্ল্যাশ (পথ পৃথককারী) পৃথককারী হিসাবে ব্যবহার করে)।
নিনজালজ

উত্তর:


26

এটি এমনভাবে করা হয়েছে যাতে আপনি যখন কোনও বহু-বাইট ক্রমের মাঝখানে থাকেন তখন সনাক্ত করতে পারেন। ইউটিএফ -8 ডেটার দিকে তাকানোর সময়, আপনি যদি জানেন যে আপনি যদি 10xxxxxxকোনও মাল্টিবাইট চরিত্রের মাঝখানে থাকেন এবং আপনি না দেখেন 0xxxxxxবা না দেখেন সেদিকে প্রবাহে ফিরে আসা উচিত 11xxxxxx। আপনার স্কিম ব্যবহার করে, 2 বা 3 বাইট সহজেই হয় হয় 0xxxxxxxবা যেমন প্যাটারগুলির সাথে শেষ হতে পারে11xxxxxx

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


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

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

3
অন্য একটি গুরুত্বপূর্ণ বৈশিষ্ট্য: যদি এম্বেড শূন্য কোডপয়েন্ট নেই, তবে স্ট্রিংটিতে এম্বেড শূন্য নেই।
উত্সাহক

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

@ কিবিটি937৩: আপনার স্কিমটি ব্যবহার করে, একটি স্ট্রিংয়ে অন্য একটি রয়েছে কিনা তা খুঁজে পেতে কীভাবে একজন দ্রুত স্ক্যান করবেন?
সুপারক্যাট

6

সরকারী ভাবে ডিকোডার কখন এটি tuple মাঝখানে এবং এটা বাইট লাফালাফি (অথবা পিছন যান) সঙ্গে বাইট শুরু না হওয়া পর্যন্ত জানে দেয় 0বা 11; এটি যখন কোনও একক বাইট দূষিত হয়ে যায় তখন আবর্জনার মানগুলিকে বাধা দেয়।


3

সংক্ষিপ্ত উত্তর, আপনার প্রস্তাবনাটি প্রথম বাইট এবং ধারাবাহিকতা বাইটগুলির মধ্যে পার্থক্য করে না।

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


2

যা উল্লেখ করা হয়নি তা হ'ল আপনি যদি ইউটিএফ -8 দিয়ে কোড পয়েন্টের প্রথম বাইটে নির্দেশ করার গ্যারান্টিযুক্ত কোড পয়েন্টের সঠিক ক্রম এবং একটি পয়েন্টারটি পেয়ে থাকেন তবে আপনি খুব সহজেই প্রথম বাইটটিতে পয়েন্টারটি খুঁজে পেতে পারেন পূর্ববর্তী কোড পয়েন্টের (01 x xxxx দিয়ে শুরু হওয়া সমস্ত বাইটগুলি এড়িয়ে যান)। আপনার এনকোডিংয়ের মাধ্যমে স্ট্রিংয়ের শুরু পর্যন্ত সমস্ত বাইট সম্ভাব্যভাবে পরীক্ষা না করেই অসম্ভব।

(2n + 2) বাইটের ক্রমগুলি বিবেচনা করুন

0xxxxxxx
n times (10xxxxxx, 10xxxxxx)
0xxxxxxx

এবং

n times (10xxxxxx, 10xxxxxx)
(10xxxxxx, 0xxxxxxx)

এই ক্রমের পরে যদি আপনার প্রথম কোড পয়েন্টের প্রথম বাইটে একটি পয়েন্টার থাকে তবে শেষ কোডপয়েন্টটি 0XXXXX বা (10 xxxxxxxx) কিনা তা জানতে আপনাকে অবশ্যই সমস্ত বাইট পরীক্ষা করতে হবে ।

প্রকৃতপক্ষে আরও কার্যকর এনকোডিং স্কিম রয়েছে, যেখানে পূর্ববর্তী কোড পয়েন্টে যাওয়া স্থির সময়ে করা যায় এবং একটি কোড পয়েন্টের মাঝখানে পয়েন্টার স্থির করা যায়। নিম্নলিখিত কোডগুলির অনুমতি দিন:

X where X < 128
YX where 128 ≤ Y < 236, X < 128
ZYY where 236 ≤ Z < 256, 0 ≤ Y < 236. 

পূর্ববর্তী তিনটি বাইটের একটি যদি 236 ডলার হয় তবে এটি 3 বাইট সিকোয়েন্সের সূচনা, কারণ কোনও বৈধ 3 বাইট অনুক্রমের মধ্যে এরকম দুটি বাইট থাকতে পারে না। অন্যথায়, পূর্ববর্তী দুটি বাইটগুলির মধ্যে একটি যদি 128 ডলার হয় তবে এটি দুটি বাইট অনুক্রমের শুরু। অন্যথায়, পূর্ববর্তী বাইটটি একটি একক বাইট <128।

সাবস্ট্রিংয়ের সন্ধান করা কিছুটা আরও কঠিন হয়ে ওঠে। আপনি শূন্য বাইটগুলি বাদ দিতে চাইতে পারেন যাতে কোনও স্ট্রিংয়ে কেবল একটি শূন্য বাইট থাকে যদি এতে শূন্য কোড পয়েন্ট থাকে।


যা উল্লেখ করা হয়নি ... - সত্যই এটি @ratchet ফ্রিকের উত্তরে তৈরি পর্যবেক্ষণ থেকে সরাসরি অনুসরণ করে না।
পাইওটার ডব্রোগোস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.