একটি স্ট্রিং হলো ক্যারেক্টারগুলোর একটি সিকোয়েন্স; এগুলো একটি অ্যাবস্ট্রাক্ট কনসেপ্ট, এবং ডিস্কে সরাসরি সংরক্ষণ করা যায় না। একটি বাইট স্ট্রিং হলো বাইটগুলোর একটি সিকোয়েন্স - জিনিসগুলো যা ডিস্কে সংরক্ষণ করা যায়। এদের মধ্যে ম্যাপিং হলো একটি এনকোডিং - এনকোডিংগুলো বেশ অনেক (এবং অনন্ত সম्भব) - এবং আপনাকে জানতে হবে কোনটি নির্দিষ্ট কেসে প্রযোজ্য যাতে কনভার্সন করা যায়, কারণ ভিন্ন এনকোডিং একই বাইটসকে ভিন্ন স্ট্রিংতে ম্যাপ করতে পারে। উদাহরণস্বরূপ, একই বাইট স্ট্রিং ২টি ভিন্ন এনকোডিং-এ ২টি ভিন্ন স্ট্রিং রিপ্রেজেন্ট করতে পারে। উদাহরণস্বরূপ,
>>> 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ς'
এনকোডিং জানলে, আপনি বাইট স্ট্রিং-এর .decode()` মেথড ব্যবহার করে সঠিক ক্যারেক্টার স্ট্রিং পেতে পারেন। ক্যারেক্টার স্ট্রিং-এর .encode()` মেথড বিপরীত দিশায় কাজ করে এবং ক্যারেক্টার স্ট্রিংকে বাইট স্ট্রিং-এ এনকোড করে।