เปรียบเทียบเนื้อข้อมูลของ UTF-8 กับ Unicode หรือ UTF-16

เปรียบเทียบ utf8 utf16 และ unicode
เปรียบเทียบ utf8 utf16 และ unicode

ปกติผมจะเรียกว่าประเภทตัวอักษรแบบ Unicode
แต่ใน Firefox และ Chrome เรียกว่า UTF-16
ในบราวเซอร์รุ่นใหม่จะรู้อัตโนมัติว่าเป็นแฟ้มข้อมูลแบบใด เพื่อการแสดงผล

UTF-8
UTF-8 เป็นมาตรฐานของตัวอักษร มี Character table ที่กำหนดอย่างชัดเจน
หากสร้างแฟ้มแบบ UTF-8 ที่มีตัวอักษร 3 ตัวคือ “กขค” จะใช้พื้นที่ทั้งหมด 12 bytes
โดยใช้พื้นที่เก็บข้อมูลตัวอักษรละ 3 bytes และส่วน header คงที่อีก 3 bytes
เมื่อใช้โปรแกรม editplus ที่กำหนด encoding type เป็น UTF-8 แล้วสร้างแฟ้ม พบว่า

กอไก่ คือ E0 B8 81 ฐาน 16
ขอไข่ คือ E0 B8 82 ฐาน 16
คอควาย คือ  E0 B8 84 ฐาน 16
โดย 3 Bytes แรกของแฟ้ม คือ EF BB BF ฐาน 16

แต่ตัวเลขในแฟ้มประเภท UTF-8 จะใช้ค่าตามตาราง ASCII เหมือนเดิม
แต่อักษร 3 bytes แรกก็ยังมีอยู่เหมือนเดิม
เมื่อสร้างแฟ้มที่มี “012” ก็จะได้แฟ้มขนาด 6 Bytes
ซึ่งมาตรฐานนี้กำหนดว่าภาษาไทยอยู่ระหว่าง 0xe0 0xb8 0x80 ถึง 0xe0 0xb9 0xbf
แต่ถ้าเป็นมาตรฐาน unicode หรือ UTF-16 จะอยู่ระหว่าง U+0E00 ถึง U+0E7F

UTF-16
หากกำหนดประเภทแฟ้มเป็น unicode หรือ UTF-16 แล้ว save as ข้อมูล “กขค”
จะใช้พื้นที่ขนาด 8 bytes พบว่า

กอไก่ คือ 01 0E ฐาน 16
ขอไข่ คือ 02 0E ฐาน 16
คอควาย คือ  04 0E ฐาน 16
โดย 2 bytes แรก คือ FF FE ฐาน 16

แต่ถ้าเป็นตัวเลข “012” ก็จะมีขนาดเท่ากับ “กขค” ที่ใช้พื้นที่ 8 bytes
โดย 2 bytes แรกเหมือนเดิม แต่ข้อมูลคือ 30 00 31 00 32 00
ซึ่ง unicode จะมีขนาดแฟ้มแน่นอน คือ ตัวอักษรละ 2 bytes
เมื่อรวมกับ header อีก 2 bytes ก็จะรู้ว่าแฟ้มนี้มีกี่ตัวอักษร
เช่น “ก0ข1ค2” จะมีขนาด 14 bytes

ขนาดแฟ้มที่แตกต่าง
เมื่อพิจารณาดูความต่างของขนาดแฟ้มจะพบว่า
ประเภท UTF-8 จะมีขนาดแฟ้มแปรผัน
ตามลักษณะของข้อมูล โดยตัวเลขใช้ 1 byte แต่ตัวอักษรใช้ 3 bytes
เช่น  “ก0ข1ค2” จะมีขนาด 15 bytes
เพราะ กขค ใช้พื้นที่ 9 bytes และ 012 ใช้พื้นที่ 3 bytes
รวม header 3 bytes ก็จะเป็น 15 bytes