কম্পিউটার

রুবি বোঝা:স্ট্রিং এনকোডিং, ASCII এবং ইউনিকোড

এমন একটি বিশ্বে কীভাবে অক্ষরের স্ট্রিং থাকতে পারে যেখানে কম্পিউটার কেবলমাত্র একটি এবং শূন্য বোঝে?

ভাল…

ঠিক যেমন আমরা একটি আইপি ঠিকানায় একটি ডোমেন নাম ম্যাপ করতে পারি৷

অথবা একটি নির্দিষ্ট পণ্যের জন্য একটি বারকোড৷

আমরা পারি...

অক্ষরে সংখ্যা ম্যাপ করুন!

97 পছন্দ করুন "a"-এ .

অথবা 122 "z"-এ .

ঠিক এভাবেই সংখ্যার জগতে আমরা অক্ষর থাকতে পারি।

কিন্তু কোন সংখ্যা কোন অক্ষরের সাথে যায়?

এই প্রশ্নের উত্তর দিতে আমরা বিভিন্ন ক্যারেক্টার ম্যাপিং সিস্টেম উদ্ভাবন করেছি।

ASCII দিয়ে শুরু।

ASCII এর অর্থ হল "আমেরিকান স্ট্যান্ডার্ড কোড ফর ইনফরমেশন ইন্টারচেঞ্জ"।

আপনি একটি ASCII টেবিল খুঁজে পেতে পারেন, অথবা আপনি রুবিকে তাদের ASCII মানতে অক্ষর রূপান্তর করতে বলতে পারেন।

এরকম :

"a".ord
# 97

একাধিক অক্ষরের জন্য :

"abc".bytes
# [97, 98, 99]

আপনার যদি একটি পূর্ণসংখ্যা থাকে তবে আপনি সংশ্লিষ্ট অক্ষর পেতে পারেন।

এরকম :

97.chr
# "a"

ASCII এনকোডিং অন্তর্ভুক্ত :

  • অক্ষর নিয়ন্ত্রণ করুন (যেমন নতুন লাইন, ট্যাব, নাল)
  • চিহ্ন (যেমন বন্ধনী, সমান চিহ্ন, প্রশ্ন চিহ্ন)
  • সংখ্যা (0-9)
  • অক্ষর (a-z, A-Z)

আমরা এই নিবন্ধে পরে দেখব, অক্ষরের এই পরিসর সীমিত।

কেন?

কারণ এতে অন্যান্য ভাষার অক্ষর ও চিহ্ন অন্তর্ভুক্ত করা হয় না, যেমন চীনা বা জাপানি।

আসল ওয়ার্ল্ডে ASCII

এই পুরো ম্যাপিং সংখ্যা স্ট্রিং জিনিস আপনার জন্য পর্দার আড়ালে ঘটে.

কিন্তু কিছু ব্যবহারিক ব্যবহার আছে!

উদাহরণস্বরূপ :

HTTP স্পেসিফিকেশন ইউআরএল-এর মধ্যে নির্দিষ্ট অক্ষরকে অনুমতি দেয় না।

কিন্তু আপনি এই অবৈধ অক্ষরগুলিকে ASCII ফর্ম্যাটে এনকোড করতে পারেন এবং বেশিরভাগ আধুনিক ওয়েব সার্ভার সঠিকভাবে ব্যাখ্যা করবে৷

example.com/a+++ => example.com/a%2B%2B%2B

%2B কি ?

এটি + অক্ষর , ASCII-এনকোডেড বিন্যাসে।

আপনি অক্ষর রূপান্তর করতে এই জ্ঞান ব্যবহার করতে পারেন।

উদাহরণস্বরূপ :

আপনি যদি ASCII টেবিলটি দেখেন, আপনি লক্ষ্য করবেন যে আপনি একটি ছোট হাতের অক্ষর থেকে 32 বিয়োগ করে বড় হাতের অক্ষরে রূপান্তর করতে পারেন।

("a".ord - 32).chr
# "A"

এটিও অন্যভাবে কাজ করে।

("A".ord + 32).chr
# "a"

হ্যাঁ৷

রুবিতে, আমাদের কাছে upcase আছে &downcase পদ্ধতি।

কিন্তু এটি কোনো ধরনের ইন্টারভিউ প্রশ্ন, কোডিং চ্যালেঞ্জ বা অনুরূপ পরিস্থিতিতে আপনার জন্য সহায়ক হতে পারে।

ইউনিকোড কি?

ASCII শুধুমাত্র 127টি ভিন্ন অক্ষর পর্যন্ত এনকোড করতে পারে (বর্ধিত ASCII সহ 256), এটি আমরা কোন অক্ষরকে উপস্থাপন করতে পারি তা সীমাবদ্ধ করে।

সমাধান?

ইউনিকোড।

ইউনিকোড হল একটি স্ট্রিং এনকোডিং সিস্টেম যা এক মিলিয়ন ভিন্ন অক্ষর পর্যন্ত উপস্থাপন করতে পারে .

এটি ASCII এর চেয়ে অনেক বেশি জায়গা!

এখন আমরা সব ধরনের ভাষার অক্ষর, নতুন চিহ্ন এবং এমনকি ইমোজিও অন্তর্ভুক্ত করতে পারি।

এখানে কিছু ইউনিকোড আছে :

ɑΩϕβΣπ

এগুলি গ্রীক বর্ণমালার অক্ষর যা ASCII ব্যবহার করে প্রদর্শন করা যায় না৷

রুবিতে ইউনিকোড কীভাবে ব্যবহার করবেন

রুবির ইউনিকোডের জন্য সমর্থন রয়েছে, এটি রুবি 1.9 থেকে ডিফল্টরূপে সক্ষম।

তাই আপনি এটি করতে পারেন :

π = 3.141592

বা এটি :

def ★★★
  puts "You get 3 stars, great job!"
end

★★★
# "You get 3 stars, great job!"

বেশ মজা!

তবে সম্ভবত এই চিহ্নগুলি ব্যবহার করে পদ্ধতি এবং ভেরিয়েবলগুলিকে সংজ্ঞায়িত করা এতটা ব্যবহারিক নয় কারণ সেগুলি আমাদের কীবোর্ডে নেই৷

আসলে, বৈধ, অদৃশ্য ইউনিকোড অক্ষর আছে।

উদাহরণ :

def ​
  puts "Invisible method"
end
​

এটি একটি নাম ছাড়া একটি পদ্ধতির মত দেখাচ্ছে, যা সাধারণত অনুমোদিত নয়৷

কিন্তু এটি সেই অদৃশ্য ইউনিকোড অক্ষরের কারণে কাজ করে!

স্ট্রিং এনকোডিং পদ্ধতি

রুবির বিভিন্ন এনকোডিং সিস্টেমের সাথে কাজ করার পদ্ধতি রয়েছে৷

উদাহরণস্বরূপ :

"abc".encoding.name
# "UTF-8"

কিছু বিশেষ পরিস্থিতি আছে যেখানে বর্তমান এনকোডিং (encoding.name ) প্রকৃত এনকোডিং এর সাথে মেলে না স্ট্রিং এর।

আপনি একটি ওয়েবসাইট, ফাইল, ডাটাবেস বা অন্য বাহ্যিক উত্স থেকে ডেটা পড়ার সময় এটি খুঁজে পেতে পারেন৷

এর ফলে একটি InvalidByteSequenceError হবে .

যদি তা হয় আপনাকে এনকোডিং পরিবর্তন করতে হবে .

কিভাবে?

encode ব্যবহার করে পদ্ধতি:

"abcΣΣΣ".encode("ASCII", "UTF-8", undef: :replace)

# "abc???"

আমি UTF-8 (ইউনিকোড) থেকে রূপান্তর করছি ASCII-এ , এবং কারণ Σ অক্ষরটি ASCII-তে উপলব্ধ নয়, আমরা রুবিকে এটি প্রতিস্থাপন করতে বলি৷

ডিফল্টরূপে, এটি অনির্ধারিত অক্ষরগুলিকে প্রশ্ন চিহ্ন দিয়ে প্রতিস্থাপন করে৷

তবে আপনি এটি পরিবর্তন করতে পারেন।

এরকম :

"abcΣΣΣ".encode("ASCII", "UTF-8", invalid: :replace, undef: :replace, replace: "")

# "abc"

অথবা "ফলব্যাক" বিকল্প ব্যবহার করে৷ :

"abcΣΣΣ".encode("ASCII", "UTF-8", fallback: {"Σ" => "E"})

# "abcEEE"

এটি বলছে :

"UTF-8 (ইউনিকোড) থেকে ASCII-তে সমস্ত অক্ষর প্রতিস্থাপন করুন, ASCII-তে বিদ্যমান নেই এমন অক্ষর অনুবাদ করতে ফলব্যাক হ্যাশ ব্যবহার করুন"৷

আরেকটি পদ্ধতি, force_encoding , এই অনুবাদ পদক্ষেপ ছাড়াই এনকোডিং পরিবর্তন করে।

উদাহরণ :

"abc½½½".force_encoding("iso-8859-1")

আপনি Encoding.aliases সহ উপলব্ধ এনকোডিংগুলির একটি তালিকা পেতে পারেন৷ পদ্ধতি।

সারাংশ

আপনি শিখেছেন কিভাবে কম্পিউটার এনকোডিং টেবিল ব্যবহার করে সংখ্যা থেকে অক্ষর তৈরি করে! আপনি রুবিতে ASCII এবং ইউনিকোড সম্পর্কেও শিখেছেন।

এখন আপনার সম্পাদক খুলুন এবং কিছু মজার অনুশীলন করুন 😃

পড়ার জন্য ধন্যবাদ।


  1. রুবির সাথে সিলেকশন সর্ট বোঝা

  2. রুবিতে সন্নিবেশ বাছাই বোঝা

  3. রুবি স্ট্রিং বিন্যাস

  4. রুবিতে এনকোডিং সমস্যা সমাধানের 3টি ধাপ