ইউটিএফ -8 হ'ল ইউনিকোড কোডপয়েন্টগুলিকে ভেরিয়েবল-প্রস্থের বিন্যাসে এনকোড করার তুলনামূলক সহজ উপায় যা ইউনিকোড সম্পর্কে অবগত নয় এমন কোডটি সহজেই বিভ্রান্ত করে না।
ইউটিএফ -8 সংক্ষিপ্ত বিবরণ
- 1-0x7F ব্যাপ্তিতে অন্তর্ভুক্ত বাইটগুলি সাধারণত বৈধ
- বিট প্যাটার্নযুক্ত
10XX XXXX
বাইটগুলি একটি কোডপয়েন্টের অংশটি এনকোড করার জন্য ছয়টি অন্তত উল্লেখযোগ্য বিট ব্যবহার করা হচ্ছে, ধারাবাহিকতা বাইট হিসাবে বিবেচিত হয়। পূর্ববর্তী বাইট দ্বারা প্রত্যাশিত না হলে এগুলি অবশ্যই উপস্থিত হবে না। - প্যাটার্ন সহ বাইটগুলি
110X XXXX
পরে একটি ধারাবাহিকতা বাইট আশা করে - প্যাটার্ন সহ
1110 XXXX
বাইটস পরে দুটি ধারাবাহিকতা বাইট আশা করে - প্যাটার্ন সহ
1111 0XXX
বাইটস পরে তিনটি ধারাবাহিকতা বাইট আশা করে - অন্যান্য সমস্ত বাইটগুলি অবৈধ এবং কোনও ইউটিএফ -8 স্ট্রিমে কোথাও উপস্থিত হওয়া উচিত নয়। 5, 6 এবং 7 বাইট ক্লাস্টারগুলি তাত্ত্বিকভাবে সম্ভব, তবে এই চ্যালেঞ্জের উদ্দেশ্যে অনুমতি দেওয়া হবে না।
ওভারলং এনকোডিং
ইউটিএফ -8 এরও দরকার যে কোনও কোডপয়েন্টকে সর্বনিম্ন সংখ্যা বাইটের সাথে উপস্থাপন করা উচিত। যে কোনও বাইট সিকোয়েন্স যা কম বাইট সহ উপস্থাপন করা যায় তা বৈধ নয়। পরিবর্তিত ইউটিএফ -8 নাল অক্ষরগুলির জন্য এটিতে একটি ব্যতিক্রম যুক্ত করে (ইউ +0000), যা C0 80
(হেক্স উপস্থাপনা) হিসাবে উপস্থাপন করা উচিত , এবং এর পরিবর্তে নালী বাইটগুলি প্রবাহের যে কোনও জায়গায় উপস্থিত হতে বারণ করে না। (এটি এটি নাল-টার্মিনেটেড স্ট্রিংগুলির সাথে সামঞ্জস্যপূর্ণ করে তোলে)
চ্যালেঞ্জ
আপনাকে এমন একটি প্রোগ্রাম তৈরি করতে হবে যা, যখন বাইটের একটি স্ট্রিং দেওয়া হয় তা নির্ধারণ করে যে that স্ট্রিংটি বৈধ পরিবর্তিত ইউটিএফ -8 প্রতিনিধিত্ব করে কিনা এবং বৈধ হলে সত্যবাদী মান এবং অন্যথায় মিথ্যা মান প্রদান করবে। নোট করুন যে আপনাকে অবশ্যই অতিরিক্ত লম্বা এনকোডিংগুলি এবং নাল বাইটগুলি পরীক্ষা করতে হবে (যেহেতু এটি সংশোধিত ইউটিএফ -8)। আপনাকে ইউটিএফ -8 মানগুলি ডিকোড করার দরকার নেই।
উদাহরণ
41 42 43 ==> yes (all bytes are in the 0-0x7F range)
00 01 02 ==> no (there is a null byte in the stream)
80 7F 41 ==> no (there is a continuation byte without a starter byte)
D9 84 10 ==> yes (the correct number of continuation bytes follow a starter byte)
F0 81 82 41 ==> no (there are not enough continuation bytes after F0)
EF 8A A7 91 ==> no (too many continuation bytes)
E1 E1 01 ==> no (starter byte where a continuation byte is expected)
E0 80 87 ==> no (overlong encoding)
41 C0 80 ==> yes (null byte encoded with the only legal overlong encoding)
F8 42 43 ==> no (invalid byte 'F8')
বিধি
- স্ট্যান্ডার্ড নিয়ম এবং ফাঁকগুলি প্রযোজ্য
- স্বাক্ষরবিহীন বাইট পরিসর (0-255) এর সমস্ত মান যতক্ষণ পড়া যায় ততক্ষণ ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে be
- আপনাকে নাল-টার্মিনেটেড স্ট্রিংয়ের পরিবর্তে অ্যারে বা ফাইল ব্যবহার করতে হবে। আপনার নাল বাইটগুলি পড়তে সক্ষম হতে হবে।
- সবচেয়ে কম কোড জয়!
- নোট করুন যে ইউটিএফ -8 ডিকোড করতে বিল্টিনগুলি ব্যবহার করা এখানে প্রদত্ত প্রয়োজনীয়তার সাথে সামঞ্জস্য করার গ্যারান্টিযুক্ত নয়। আপনার চারপাশে কাজ করার এবং বিশেষ ক্ষেত্রে তৈরি করার প্রয়োজন হতে পারে।
সম্পাদনা: ইউটিএফ -8 ডিকোড করে এমন বিল্টিন ব্যবহার না করার জন্য যুক্ত বোনাস
EDIT2: অপরিবর্তিত বোনাস যেহেতু কেবলমাত্র জাস্ট উত্তরটি যোগ্য এবং এটি নির্ধারণ করা বিশ্রী k