February 14, 2013

การกำหนด charset (tis-620, utf-8) ให้กับ Web page

สำหรับผู้ที่สงสัยว่าการกำหนด charset ให้กับหน้าเว็บที่มีภาษาไทยนั้น ควรกำหนดเป็น tis-620 หรือ utf-8 หรือ windows-874 แบบไหนจะดีกว่ากัน

ผมจึงได้ลองทดสอบเทียบกันดู (แต่ได้ตัด windows-874 ออก เพราะคิดว่ามันเป็นมาตรฐานเฉพาะของ Microsoft เท่านั้น)

ผมได้สร้างไฟล์ที่มี Tag <meta http-equiv="content-Type" content="text/html; charset=tis-620">
แล้วลองใช้ charset 3 แบบ คือ ไม่กำหนด, tis-620 และ utf-8

แล้วบันทึกเป็นแบบ ANSI, Unicode, UTF-8 ด้วย Notepad
จากนั้นใช้ Firefox เปิดดู แล้วตรวจสอบว่าภาษาไทยอ่านออกหรือไม่ และดูว่า Firefox เลือก Encoding ให้เป็นแบบใด



ผลการทดสอบ
Case
charset File saving Thai Readable Firefox Encoding
1
- ANSI ÀÒÉÒä·Â Western (ISO-8858-1)
2
- UTF-8 Yes Unicode (UTF-8)
3
- Unicode Yes Unicode (UTF-16)
4
tis-620 ANSI Yes Thai (TIS-620)
5
tis-620 UTF-8 Yes Unicode (UTF-8)
6
tis-620 Unicode Yes Unicode (UTF-16)
7
utf-8 ANSI  Unicode (UTF-8)
8
utf-8 UTF-8 Yes Unicode (UTF-8)
9
utf-8 Unicode Yes Unicode (UTF-16)


กรณี 2,3,5,6,8 และ 9แสดงว่า Firefox สามารถค้นหา Encoding ที่ถูกต้องได้เองโดยดูจาก BOM (Byte order mark) ของไฟล์ที่ถูกกำหนดในระหว่างการบันทึก ดังนี้ทุกกรณีที่กล่าวมาจึงสามารถใช้งานภาษาไทยได้ถูกต้อง
ในกรณี 1, 4 และ 7 ที่บันทึกแบบ ANSI ซึ่งไม่มี BOM ที่หัวไฟล์ Firefox จะไปหา Encoding จาก charset ของคำสั่ง html แทน โดย
-กรณี 1 ไม่มีการระบุ charset ตัว Firefox จะใช้ Western (ISO-8858-1) แทน ซึ่งจะทำให้ตัวอักษรไทยอ่านไม่ออก
-กรณี 4 ระบุ charset เป็น tis-620 ซึ่งตรงกับการบันทึกแบบ ANSI ทำให้สามารถอ่านภาษาไทยได้
-กรณี 7 ระบุ charset เป็น utf-8 แต่ในตอนบันทึกไฟล์เป็นแบบ ANSI ทำให้ไม่สามารถอ่านภาษาไทยได้

สรุปผลการทดสอบ
1. การกำหนดวิธีการบันทึก (File Encoding) เป็นสิ่งที่สำคัญ เพราะ Firefox จะดูที่หัวของไฟล์ก่อน (BOM) โดยไม่สนใจ charset ที่ระบุ
2. charset จะถูกใช้เมื่อไฟล์นั้นถูก Save มาแบบ ANSI เท่านั้น คือเป็น Text file ธรรมดาที่ไม่มีการ Encode  ใดๆ ซึ่งตัวอักษรไทยจะเป็น 8 บิตตาม TIS-620 และไม่มีหัวไฟล์ (BOM)
3. การเลือกกำหนด charset เป็น tis-620 จะดีกว่าการเลือกแบบอื่น เพราะไม่ว่าจะ Save แบบไหนก็ใช้ได้หมด

ข้อแนะนำ
แม้การกำหนด charset เป็น tis-620 จะดูปลอดภัยที่สุด แต่แนวโน้มปัจจุบัน โปรแกรมต่างๆ หันมาใช้ UTF-8 เป็นมาตรฐานในการติดต่อมากขึ้น ดังนั้นเพื่อความเข้ากันได้ในอนาคต ควรใช้ File Encoding และ charset เป็น UTF-8 ทั้งหมด

No comments:

Post a Comment