আমি কীভাবে স্ক্রিনে টেক্সট পড়ি তার পুরো গল্পটি বোঝার চেষ্টা করছি। জিনিসগুলি সহজ রাখার জন্য আমি একক-বাইট এনকোডিংগুলির সাথে থাকি (কোনও ইউনিকোড নেই)।
আমার ডিস্কে বাইটগুলির ক্রম রয়েছে, প্রতিটি যার মান 0 এবং 255 এর মধ্যে রয়েছে I আমি আমার কম্পিউটার প্রোগ্রামগুলি বলতে পারি যে এই বাইটগুলি প্রদর্শন করতে তাদের কোন অক্ষর এনকোডিং করা উচিত। আমি আইএসও -8859-1 ব্যবহার করতে পারি যেখানে উদাহরণস্বরূপ, 0xA4 মান সহ বাইটটি বিন্দু (¤) এর সাথে কিছু বৃত্ত। অথবা আমি আইএসও -8859-15 এ স্যুইচ করতে পারি, তারপরে 0xA4 মান সহ আমার বাইটটি ইউরো প্রতীক (€) হিসাবে সংজ্ঞায়িত করা হয়েছে।
এটি এখনও বুঝতে সহজ। তবে চরিত্রের এনকোডিং পরিবর্তনের সমান্তরাল, আমি একটি চিহ্নের সঠিক আকৃতি নির্ধারণ করতে হরফও পরিবর্তন করতে পারি। এখন, একটি ফন্ট বলতে সমস্ত অক্ষর এনকোডিংয়ের সাথে কাজ করে। সুতরাং, একটি ফন্টে দুটি চিহ্ন থাকতে হবে: ¤ এবং € €
সুতরাং, আমার স্ক্রিনে একটি পাঠ্য পাওয়ার পদক্ষেপগুলি স্পষ্টতই:
- বাইট সিকোয়েন্স সিরিয়ালি পড়ুন
- অক্ষর এনকোডিং সারণীতে সন্ধান করতে বর্তমান বাইটের সংখ্যাসূচক মানটি ব্যবহার করুন
- পদক্ষেপ 2-তে পাওয়া প্রতীকটির সঠিক আকার পেতে ফন্ট ফাইলটিতে অনুসন্ধান করতে [কিছু] ব্যবহার করুন
- ফন্ট ফাইলে সংজ্ঞায়িত মতো চিহ্ন আঁকুন
পদক্ষেপ 3-এ, এই "কিছু" কী যা ফন্টের অক্ষর এনকোডিংয়ের জন্য ব্যবহৃত হয়? হরফ ফাইলগুলি অক্ষর এনকোডিংয়ের উপর নির্ভর করে? সুতরাং, একটি ফন্টে কিছু বিল্ট-ইন "ডাবল সুইচ" প্রক্রিয়া রয়েছে যা (সিউডোকোড) এর মতো কাজ করে
get_symbol(code, encoding) {
switch code{
case 0xA4: switch(encoding) {
case 'ISO-8859-1' : return '¤';
case 'ISO-8859-15': return '€';
}
}
}
?
ফন্ট থেকে প্রকৃত প্রতীকটিতে প্রদত্ত বাইট ক্রম এবং প্রদত্ত একটি চরিত্রের এনকোডিং থেকে কীভাবে পাবেন? সর্বদা সঠিক প্রতীক দিতে কীভাবে এই ম্যাপ করা হয়?