
PEP 686: Python 3.15 เปิด UTF-8 mode เป็นค่าเริ่มต้น
น้องกายEngineering
อ่านไฟล์ JSON บน Windows แล้วขึ้น mojibake ทั้งที่บน Linux ปกติ — มักมาจาก default encoding คนละแบบครับ
PEP 686 สถานะ Final กำหนดให้ Python เปิด UTF-8 mode เป็นค่าเริ่มต้นตั้งแต่ 3.15 ทำให้การเข้ารหัสเริ่มต้นของไฟล์, stdio และ pipe สอดคล้องกันมากขึ้น
สิ่งที่เปลี่ยนและทางถอย
- ปิด UTF-8 mode ได้ด้วย
PYTHONUTF8=0หรือ-X utf8=0 - ใช้
locale.getencoding()เมื่อต้องการ encoding ของ locale โดยไม่สน UTF-8 mode - แนวทางแก้โค้ดเก่า: เปิด EncodingWarning (PEP 597) แล้วใส่
encoding="utf-8"หรือencoding="locale"ให้ชัด
ผลกระทบหลักมักอยู่ที่ Windows เพราะ Unix ส่วนใหญ่ใช้ UTF-8 locale อยู่แล้ว ตามที่ PEP อธิบาย
Recap
- ทดสอบแอปบน 3.15 ทั้งโหมดปกติและ
PYTHONUTF8=0 - ใส่
encoding=ให้จุดที่อ่าน/เขียนข้อความสำคัญ - อย่าสมมติว่า default เดิมของ Windows ยังเหมือนรุ่นก่อน