bคำนำหน้าหมายที่แท้จริงสตริงbytes
ถ้าคุณเห็นมันใช้ในหลาม 3 รหัสที่มาแสดงออกสร้างbytesวัตถุไม่ปกติUnicodestrวัตถุ หากคุณเห็นว่ามันสะท้อนอยู่ใน Python shell ของคุณหรือเป็นส่วนหนึ่งของ list, dict หรือเนื้อหาคอนเทนเนอร์อื่น ๆ คุณจะเห็นbytesอ็อบเจ็กต์ที่แสดงโดยใช้สัญกรณ์นี้
bytesโดยทั่วไปวัตถุจะมีลำดับของจำนวนเต็มในช่วง 0-255 แต่เมื่อเป็นตัวแทน Python จะแสดงไบต์เหล่านี้เป็นASCII codepointsเพื่อให้อ่านเนื้อหาได้ง่ายขึ้น ไบต์ใด ๆ นอกพิมพ์ช่วงของตัวอักษร ASCIIจะแสดงเป็นลำดับหนี (เช่น\n, \x82ฯลฯ ) ในทางกลับกันคุณสามารถใช้ทั้งอักขระ ASCII และลำดับ Escape เพื่อกำหนดค่าไบต์ สำหรับค่า ASCII จะใช้ค่าตัวเลข (เช่นb'A'== b'\x41')
เนื่องจากbytesออบเจ็กต์ประกอบด้วยลำดับของจำนวนเต็มคุณจึงสามารถสร้างbytesอ็อบเจกต์จากลำดับของจำนวนเต็มอื่น ๆ ที่มีค่าในช่วง 0-255 เช่นรายการ:
bytes([72, 101, 108, 108, 111])
และการสร้างดัชนีจะช่วยให้คุณกลับจำนวนเต็ม ( แต่หั่นผลิตใหม่bytesคุ้มค่าสำหรับตัวอย่างข้างต้นvalue[0]จะช่วยให้คุณ72แต่value[:1]เป็นb'H'72 เป็นจุดรหัส ASCII สำหรับตัวใหญ่H )
bytesแบบจำลองข้อมูลไบนารีรวมถึงข้อความที่เข้ารหัส หากbytesค่าของคุณมีข้อความคุณต้องถอดรหัสก่อนโดยใช้ตัวแปลงสัญญาณที่ถูกต้อง ตัวอย่างเช่นหากข้อมูลถูกเข้ารหัสเป็น UTF-8 คุณสามารถรับstrค่าUnicode ด้วย:
strvalue = bytesvalue.decode('utf-8')
ตรงกันข้ามจะไปจากข้อความในstrวัตถุbytesที่คุณจำเป็นต้องเข้ารหัส คุณต้องตัดสินใจเกี่ยวกับการเข้ารหัสที่จะใช้ ค่าเริ่มต้นคือใช้ UTF-8 แต่สิ่งที่คุณต้องการนั้นขึ้นอยู่กับกรณีการใช้งานของคุณเป็นอย่างมาก:
bytesvalue = strvalue.encode('utf-8')
คุณยังสามารถใช้ตัวสร้างbytes(strvalue, encoding)เพื่อทำเช่นเดียวกัน
ทั้งสองวิธีการถอดรหัสและการเข้ารหัสใช้อาร์กิวเมนต์พิเศษที่จะระบุว่าข้อผิดพลาดควรจะจัดการ
Python 2 เวอร์ชัน 2.6 และ 2.7 ยังรองรับการสร้างสตริงลิเทอรัลโดยใช้b'..'ไวยากรณ์แบบสตริงเพื่อลดความซับซ้อนของโค้ดที่ใช้ได้กับทั้ง Python 2 และ 3
bytesวัตถุไม่เปลี่ยนรูปเช่นเดียวกับstrสตริง ใช้bytearray()ออบเจ็กต์หากคุณต้องการมีค่าไบต์ที่ไม่แน่นอน