Encoding และ Decoding ใน Python 3

ใน Python 3 นั้นจะมีค่าเริ่มต้น encoding เป็น UTF-8 ทำให้เราไม่ต้องระบุ # -*- coding: utf-8 -*- ไว้ที่บรรทัดแรกของไฟล์ .py อักขระทุกอย่างของ Unicode สามารถนำมาใช้ในไฟล์ .py ได้เลย อยากตั้งชื่อตัวแปรเป็นภาษาไทยเลยก็ได้ ^^

สิ่งที่ตามมาคือ ชนิดข้อมูล str จะแสดงค่าที่เราสามารถอ่านได้ (human-readable) หมายความว่าเราสามารถใช้ทุกอักขระใน Unicode ในไฟล์ .py ของเราได้เลย เช่น emoticons ที่ code-point อยู่ในช่วง 1F600 – 1F64F (เลขฐาน 16)

grinning_face = '😀'
code_point = ord(grinning_face)  # 128512
hex(code_point)  # '0x1f600'
chr(code_point)  # '😀'

ส่วน ชนิดข้อมูล bytes เป็นการเก็บค่าของข้อมูล binary ความสัมพันธ์ระหว่าง byte และ str จะมีฟังก์ชัน encode และ decode เข้ามาเกี่ยวด้วย

# <class 'str'>
input = 'ก'

# b'\xe0\xb8\x81' <class 'bytes'>
encoded_input = input.encode('utf-8')

# 'ก' <class 'str'>
decoded_input = encoded_input.decode('utf-8')

ฟังก์ชัน encode จะเปลี่ยน str ให้เป็น bytes

ฟังก์ชัน decode จะเปลี่ยน bytes ให้เป็น str

ค่า parameter encoding ของฟังก์ชัน encode และ decode มีค่าเริ่มต้น (default) เป็น utf-8 แต่ควรจะระบุไว้ด้วยดีกว่าจะได้เห็นและเข้าใจได้ง่ายๆ (Explicit is better than Implicit) ^^