एक स्ट्रिंग वर्णों का एक क्रम है; ये एक अमूर्त अवधारणा हैं, और इन्हें सीधे डिस्क पर संग्रहीत नहीं किया जा सकता है। एक बाइट स्ट्रिंग बाइट्स का एक क्रम है - चीजें जो डिस्क पर संग्रहीत की जा सकती हैं। उनके बीच मानचित्रण एक एन्कोडिंग है - इनमें से बहुत सारे हैं (और असीम रूप से कई संभव हैं) - और आपको यह जानने की जरूरत है कि रूपांतरण करने के लिए विशेष मामले में कौन सा लागू होता है, क्योंकि एक अलग एन्कोडिंग एक ही बाइट्स को मैप कर सकती है एक अलग स्ट्रिंग के लिए। उदाहरण के लिए, एक ही बाइट स्ट्रिंग 2 अलग-अलग एन्कोडिंग में 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() विधि का उपयोग कर सकते हैं ताकि इससे सही वर्ण स्ट्रिंग प्राप्त हो सके। वर्ण स्ट्रिंग की .encode() विधि विपरीत दिशा में जाती है और वर्ण स्ट्रिंग को बाइट स्ट्रिंग के रूप में एन्कोड करती है।