decode
วิธีการของสตริง Unicode จริงๆไม่ได้มีการใช้งานใด ๆ ที่ทั้งหมด (ยกเว้นกรณีที่คุณมีข้อมูลที่ไม่ใช่ข้อความบางอย่างในสายอักขระ Unicode ด้วยเหตุผลบางอย่าง - ดูด้านล่าง) ฉันคิดว่ามันเป็นเพราะเหตุผลทางประวัติศาสตร์เป็นหลัก ใน Python 3 มันหายไปหมดแล้ว
unicode().decode()
จะทำการเข้ารหัสโดยปริยายของการs
ใช้ตัวแปลงสัญญาณเริ่มต้น (ascii) ตรวจสอบเช่นนี้:
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
ข้อความแสดงข้อผิดพลาดเหมือนกันทุกประการ
สำหรับstr().encode()
มันเป็นวิธีอื่น ๆ - มันพยายามนัยถอดรหัสของs
กับการเข้ารหัสเริ่มต้น:
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
ใช้แบบนี้str().encode()
ก็ยังฟุ่มเฟือย
แต่มีแอปพลิเคชันอื่น ๆ ของวิธีการหลังที่มีประโยชน์: มีการเข้ารหัสที่ไม่มีส่วนเกี่ยวข้องกับชุดอักขระและสามารถใช้กับสตริง 8 บิตในวิธีที่มีความหมาย:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
แม้ว่าคุณจะถูกต้อง: การใช้ "การเข้ารหัส" ที่คลุมเครือสำหรับทั้งสองแอปพลิเคชันเหล่านี้คือ ... น่าแปลกใจ อีกครั้งด้วยการแยกbyte
และstring
ประเภทใน Python 3 นี่ไม่ใช่ปัญหาอีกต่อไป