วันอังคารที่ ๒๗ พฤษภาคม พ.ศ. ๒๕๕๑

ความแตกต่างระหว่าง UTF-8 กับ TIS-620

:: ความแตกต่างระหว่าง UTF-8 กับ TIS-620::

ลายคนคงสงสัยว่ามันจะมีชุดตัวหนังสือ UTF-8 (Unicode Transformation Format) ไปทำไม เราก็ยังใช้ TIS-620 ดีอยู่แล้วไม่เน่าไม่เสีย แต่เนื่องจากตอนนี้CMS หลายๆค่ายหันมาใช้(บังคับใช้) UTF-8 ของ Unicode (ผมเองก็ใช้ UTF-8) แล้วจะถ้าคิดใช้โปรแกรมใหม่ๆ CMS ตัวใหม่ๆ ในอนาคตทั้งหมดจะสนับสนุน UTF-8 อย่างเดียว เช่น AppServ เวอร์ชั่นออกมาใหม่จะเป็น UTF-8 MAMBO 4.6 , Joomla! 1.5 ก็จะใช้ชุด(บังคับ) UTF-8 เท่านั้น

UTF-8 เป็นที่มิยมมากเพียงแต่เราไม่ค่อยได้เห็นมันจะๆ จริงๆแล้ว UTF-8 มันอยู่รอบๆเรวเนี้ยครับ อย่างเช่น ชื่อไฟล์ภาษาไทยที่อยู่บน Windows XP นั้นก็เป็น UTF-8 แต่เรายังไม่รู้ตัว, Google (search engine) ก็ทำงานแบบ UTF-8 โดยที่เราไม่รู้ตัว อุปกรณ์ต่างๆ ไม่ว่าจะเป็นมือถือที่เป็น OS Symbian, Pocket PC เค้าก็ใช้ UTF-8 กันแทบทั้งสิ้น เมื่อเห็นว่าอนาคตคงจะได้ใช้โปรแกรม ที่มันสนับสนุน ต่อไปนี้ถึงคราวสิ้นยุคทองของชุดตัวหนังสือ TIS-620 แล้ว

ความแตกต่างของ UTF-8 กับ TIS-620 มันอยู่ตรงใหน? ชุดตัวหนังสือ UTF-8 เนี้ยสามารถใช้กับภาษาอะไรก็ได้ โดยเราไม่จำเป็นต้องเปลี่ยน encoding เลย ถ้า website ของคุณมี 2 ภาษา มันก็โชว์ทั้ง 2 ภาษา (Multi language) ระบบ UTF-8 จะเก็บข้อมูล 1 - 4 ไบต์ต่อ 1 ตัวอักษร รายละเอียดอื่นๆ

อ่านเพื่มเติมที่นี่ครับ http://en.wikipedia.org/wiki/UTF-8

แต่ว่าถ้ามองในแง่ลบ UTF-8 ก็ยังไม่ค่อยมีความจำเป็นเท่าไหร่นัก และยังเปลืองน้อยที่เก็บข้อมูลกว่าของเดิมถึง 3-4เท่า เพราะ แต่ละตัวจะประกอบไปด้วยชุด ” นะ ” แบบนี้ซึ่ง TIS-620 จะเขียนได้ว่า ” นะ ” จะเห็นได้ว่าพื้นที่ในการเก็บข้อมูล ต้องเยอะขึ้นตามไปด้วย แต่ก็มีข้อดีอยู่บ้างในเรื่องการรองรับหลายภาษา (muli-language) และเราสามารถแปลงตัวอักษรจากแบบ UTF-8 มาเป็นแบบ TIS-620 โดยสามารถใช้ฟังก์ชัน iconv ครับ ใครอยากรู้ลองเข้าไปดูคำสั่งนี้แบบเต็มๆได้ที่นี่ครับ http://www.php.net/manual/en/function.iconv.php ส่วนถ้าต้องการ convert จาก UTF-8 มาเป็น TIS-620 ก็ใช้ประมาณนี้ครับ

echo iconv(’UTF-8, ‘TIS-620′, “helloสวัสดีครับ”); หรือถ้าจาก TIS-620 มาเป็น UTF-8 ก็ประมาณนี้ครับ

echo iconv( ‘TIS-620′, ‘UTF-8′, “helloสวัสดีครับ”); ซึ่งคำสั่งนี้ถูกหยิบยืมมาจาก library บน unix ที่มีชื่อว่า GNU libiconv ครับ ไปดูรายละเอียดได้ที่นี่ http://www.gnu.org/software/libiconv/ แต่ก่อนที่จะใช้คำสั่งนี้ได้ ต้องไป config ในไฟล์ php.ini โดยให้เอา comment บรรทัดนี้ออกครับ extension=php_iconv.dll และให้เอาไฟล์ php_iconv.dll ไปใส่ไว้ที่ c:\windows\system32 ด้วยครับ แล้ว restart apache ใหม่ ก็จะสามารถใช้ได้ครับ

ฟังก์ชัน iconv ใช้ด้กับ PHP5 เท่านั้นนะครับ

ข้อดีของ UTF-8

  • รองรับได้หลายภาษา แน่นอนที่สุดสำหรับผมเลือกใช้เพราะสาเหตุนี้
  • ภาษาโปรแกรมมิ่งทั้งหลายรองรับ UTF-8
  • เข้ากันได้ดีกับรหัส ASCII
  • การแปลงเป็น Charset ชนิดอื่นไม่ยุ่งยากโดยใช้ ICONV
  • สามารถเรียงลำดับอักษรภาษาไทยได้ 100% ไม่มีผิดเพี้ยน

ข้อเสียของ UTF-8

  • มีปัญหาการทำงานกับฟังก์ชั่นในบางภาษา
  • ภาษาไทยไม่ได้มีเพียงแค่ TIS-620 (มีทั้ง CP874, MacThai)
  • อ้างอิงจาก http://www.gnu.org/software/libiconv/
  • เสียเวลาในการเขียนโปรแกรมแปลงฐานข้อมูล และไฟล์ให้เป็น UTF-8
  • การออกแบบฐานข้อมูล (Field) ต้องไม่ยึดติดกับความกว้างตัวอักษรแบบเดิม เพราะ UTF-8 จะเก็บเป็น Byteสรุปคือต้องขยายความกว้าง Field เกือบทุก Field ที่เป็น Varchar เพื่อรองรับ UTF-8


แหล่งข้อมูล: http://iaee.wordpress.com