python - একটি স্ট্রিং এবং একটি বাইট স্ট্রিং মধ্যে পার্থক্য কি?




string character (3)

কম্পিউটারটি সঞ্চয় করতে পারে এমন একমাত্র জিনিস বাইট।

কোনও কম্পিউটারে কিছু সঞ্চয় করার জন্য, আপনাকে প্রথমে এটি এনকোড করতে হবে, অর্থাৎ এটি বাইটগুলিতে রূপান্তর করুন। উদাহরণ স্বরূপ:

  • আপনি যদি সঙ্গীত সংরক্ষণ করতে চান তবে আপনাকে অবশ্যই MP3 , WAV , ইত্যাদি ব্যবহার করে এটি এনকোড করতে হবে।
  • আপনি যদি কোনও ছবি সংরক্ষণ করতে চান তবে আপনাকে অবশ্যই এটি PNG , JPEG , ইত্যাদি ব্যবহার করে এনকোড করতে হবে।
  • যদি আপনি পাঠ্য সংরক্ষণ করতে চান তবে আপনাকে প্রথমে ASCII , UTF-8 , ইত্যাদি ব্যবহার করে এনকোড করতে হবে।

MP3 , WAV , PNG , JPEG , ASCII এবং UTF-8 এনকোডিংয়ের উদাহরণ। একটি এনকোডিং অডিও, চিত্র, পাঠ, ইত্যাদি বাইটে প্রতিনিধিত্ব করার জন্য একটি বিন্যাস।

পাইথন ইন, একটি বাইট স্ট্রিং ঠিক যে: বাইট একটি ক্রম। এটা মানুষের পঠনযোগ্য নয়। হুডের অধীনে, কম্পিউটারে এটি সংরক্ষণ করার আগে সবকিছুই বাইটি স্ট্রিং রূপান্তর করা আবশ্যক।

অন্য দিকে, একটি অক্ষর স্ট্রিং, প্রায়শই কেবল "স্ট্রিং" বলা হয়, অক্ষরগুলির একটি ক্রম। এটা মানুষের পঠনযোগ্য। একটি অক্ষর স্ট্রিং কোনও কম্পিউটারে সরাসরি সংরক্ষণ করা যাবে না, এটি প্রথমে এনকোড করা দরকার (একটি বাইট স্ট্রিং রূপান্তরিত)। একাধিক এনকোডিং রয়েছে যার মাধ্যমে অক্ষর স্ট্রিংটি বাইটি স্ট্রিং, যেমন ASCII এবং UTF-8 রূপে রূপান্তরিত করা যেতে পারে।

'I am a string'.encode('ASCII')

উপরের পাইথন কোড ASCII এনকোডিং ব্যবহার করে 'I am a string' স্ট্রিং এনকোড করব। উপরের কোডের ফলাফল একটি বাইট স্ট্রিং হবে। যদি আপনি এটি মুদ্রণ করেন, পাইথন এটি উপস্থাপন করবে যেমন b'I am a string' । তবে, মনে রাখবেন যে বাইট স্ট্রিংগুলি মানব-পঠনযোগ্য নয় , এটি কেবলমাত্র পাইথন তাদের মুদ্রণ করার সময় ASCII থেকে ডিস্কড করে। পাইথন ইন, একটি বাইট স্ট্রিং একটি b দ্বারা প্রতিনিধিত্ব করা হয়, বাইট স্ট্রিং এর ASCII উপস্থাপনা অনুসরণ করে।

যদি আপনি এটি এনকোড করার জন্য ব্যবহৃত এনকোডিংটি জানেন তবে একটি বাইট স্ট্রিংটি একটি অক্ষর স্ট্রিংয়ের মধ্যে ডিকোড করা যেতে পারে।

b'I am a string'.decode('ASCII')

উপরের কোডটি মূল স্ট্রিং 'I am a string' ফেরত 'I am a string'

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

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

যদিও আমি নিশ্চিত না পার্থক্য কি - যদি থাকে।


পাইথন 3 অনুমান করা হচ্ছে (পাইথন 2 এ, এই পার্থক্যটি একটু কম সংজ্ঞায়িত) - একটি স্ট্রিং অক্ষরের একটি ক্রম, অর্থাৎ ইউনিকোড কোডপয়েন্টগুলি ; এটি একটি বিমূর্ত ধারণা, এবং ডিস্কে সরাসরি সংরক্ষণ করা যাবে না। একটি বাইট স্ট্রিং একটি ক্রম, অস্পষ্টভাবে, বাইট - ডিস্কে সংরক্ষণ করা যেতে পারে যা জিনিস। তাদের মধ্যে ম্যাপিং একটি এনকোডিং - এগুলির বেশিরভাগই রয়েছে (এবং অসীম অনেকগুলি সম্ভব) - এবং রূপান্তর করার জন্য নির্দিষ্ট ক্ষেত্রে যা যা প্রযোজ্য তা জানতে হবে, কারণ একটি ভিন্ন এনকোডিং একই বাইট ম্যাপ করতে পারে একটি ভিন্ন স্ট্রিং:

>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-16')
'蓏콯캁澽苏'
>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-8')
'τoρνoς'

একবার আপনি কোনটি ব্যবহার করতে পারেন তা .decode() , আপনি বাইট স্ট্রিংয়ের .decode() পদ্ধতিটি উপরে থেকে সঠিক অক্ষর স্ট্রিং পেতে এটি ব্যবহার করতে পারেন। সম্পূর্ণতার জন্য, একটি অক্ষর স্ট্রিং এর .encode() পদ্ধতি বিপরীত ভাবে যায়:

>>> 'τoρνoς'.encode('utf-8')
b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'

পাইথন 2 তে , str 8-বিট মানের ক্রমগুলি ধারণ করে, তবে unicode ইউনিকোড অক্ষরের ক্রমগুলি ধারণ করে। এক জিনিস মনে রাখতে হবে যে str এবং শুধুমাত্র 7-বিট ASCI অক্ষরগুলি থাকে তবে str এবং unicode অপারেটরদের সাথে একসাথে ব্যবহার করা যেতে পারে।

পাইথন 3 এ , bytes 8-বিট মানগুলির ক্রম ধারণ করে, যখন str মধ্যে ইউনিকোড অক্ষরের ক্রম রয়েছে। bytes এবং str > অপারেটরগুলির সাথে একসাথে ব্যবহার করা যাবে না > বা +

Python 2 এ str এবং unicode এবং পাইথন 3 এ bytes এবং str মধ্যে রূপান্তরিত করার জন্য সহায়ক ফাংশন ব্যবহার করা উপকারী হতে পারে।





byte