สร้างเว็บให้ถูกหลัก อย่าลืมตั้ง Character set เป็น tis-620

  1. ผมมีเวลาไม่มาก ขอแบบสรุปเลยได้ไหม ว่าท่านกำลังพูดถึงอะไร
    • ในการสร้างเว็บเพจ (HTML ไฟล์) ที่มีเนื้อหาเป็นภาษาไทย ควร ใส่ข้อความเพื่อบ่งบอกว่า เว็บเพจของท่านมีข้อความที่เป็นภาษาไทย เพื่อที่ Browser จะสามารถที่จะเข้าใจ และแสดงผลภาษาไทยได้ถูกต้อง อีกทั้งยังเป็นประโยชน์ในการค้นหาข้อมูลของ search engine ต่างๆ ที่จะรับทราบว่าเนื้อหาในเว็บเพจของท่านเป็นภาษาไทย
    • วิธีการทำได้โดยง่าย โดยเพียงเพิ่มบรรทัดดังตัวอย่างในส่วนหัวของ HTML ไฟล์ของท่าน
    • <head>
      
      <meta http-equiv="Content-Type" content="text/html; charset=tis-620">
      
      </head>
      
  2. character-set คืออะไร ทำไมต้องมี character set
    • คอมพิวเตอร์เก็บข้อมูลโดยรหัสดิจิตอล 0 กับ 1
    • รหัส 1 ตัว เรียกว่าเป็น 1 bit, รหัส 8 bit เรียกว่าเป็น 1 byte
    • พยัญชนะภาษาอังกฤษ มี 26 ตัว คิดแยกเป็นตัวใหญ่ตัวเล็ก รวมตัวเลขและอักษรพิเศษต่างๆ แล้ว ก็ยังมีจำนวนไม่มาก (ไม่มากคือประมาณ 100 ตัว)
    • ผู้ที่คิดค้นคอมพิวเตอร์ในยุคแรกๆ นั้นเป็นผู้ที่ใช้ภาษาอังกฤษ ดังน้นจึงคิดค้น ระบบการเก็บข้อมูลโดยใช้รหัสยาว 7 บิต (ASCII) สามารถเก็บอักขระต่างๆ ได้ แตกต่างกันทั้งหมด 2^7 ตัว = 128 ตัว นับว่าเพียงพอสำหรับการใช้งานทั่วไป เช่น ตัวอักษร A จะตรงกับรหัส ASCII 65 เขียนเป็นเลขฐาน 2 เรียงกัน 7 ตัวได้ดังนี้ 100 0001
    • ต่อมาคอมพิวเตอร์ได้แพร่หลายไปยังประเทศที่ไม่ได้ใช้แค่ภาษาอังกฤษ ได้มีวิธีการแก้ไขแบบเฉพาะหน้า โดยการเพิ่มความยาวของรหัสที่เก็บจาก 7 ตัว ให้เป็น 8 ตัว ก็จะสามารถเก็บอักษรได้ทั้งหมดเป็น 2^8 = 256 ตัว
    • ประเทศต่างๆ ก็สามารถใช้ส่วนที่เกินมาอีก 128 ตัวนั้น ใช้เก็บรหัสอักขระเพิ่มเติม ที่เป็นเฉพาะของภาษาตนเอง เช่น กลุ่มประเทศยุโรปแถบตะวันตก ก็จะใช้เก็บอักขระเช่น พวก ที่มีลักษณะคล้าย a, e, i แต่มันจุดหรือมีขีดอยู่บนตัวอักษรเหล่านั้น (ซึ่งใช้กันในภาษาของพวกเขา) ตัวอย่างเช่น รหัส 228 จะเป็นตัว a umlaut คือ a แล้วมีจุดอยู่ข้างบน 2 จุด ใช้กันในภาษาเยอรมันเป็นต้น
    • ประเทศไทยก็ได้ใช้ประโยชน์ของรหัส 128 ตัวที่เกินมานี้เช่นกัน เช่น เราเก็บรหัส ก ไก่ ไว้ที่หมายเลข 161, เราเก็บไม้มลาย "ไ" ไว้ที่รหัสหมายเลข 228 เป็นต้น
    • ดังที่กล่าวมาแล้วนั้น เราจำเป็นต้องมีตารางที่จะแสดงว่า หมายเลขอะไร หมายถึงตัวอักษรอะไร ตารางนี้ ก็จะแตกต่างกันไปในแต่ละภาษา ซึ่งมีอักขระซึ่งต่างๆ กัน
    • ดูๆ ไปแล้ว ก็ยังไม่เห็นว่าจะมีปัญหาอะไร ตราบใดที่ในเครื่องคอมพิวเตอร์ของท่าน มีใช้งาน แค่ 2 ภาษา เช่น ภาษาไทย กับ ภาษาอังกฤษ ถ้าท่านได้รับรหัสมามีค่า 228 ก็สรุปได้เลยว่าผู้ส่งต้องการจะส่งไม้มลาย มา
    • แต่หากท่านต้องการจะส่งข้อมูล ไปยังเครื่องคอมพิวเตอร์เครื่องอื่น หรือเปิด Web Site ให้ผู้คนจากทั่วโลกเข้ามาดู ที่ไม่ได้ใช้ภาษาไทย อยู่ด้วย ผู้คนเหล่านั้น จะเข้าใจได้อย่างไรว่า ท่านต้องการส่ง ไม้มลาย ซึ่งเป็นอักขระหนึ่งของภาษาไทย?
    • ถ้าคนเยอรมันได้รับรหัสนั้น ย่อมต้องแปลความหมายของรหัส 228 ที่ท่าน ส่งไปว่าเป็นอักขระ a umlaut ที่พวกเขาใช้กัน? เขาควรจะรู้ได้อย่างไรว่า เขาควรจะหยิบตารางที่ใช้แปลงค่ารหัสเป็นภาษาไทย แทนที่จะใช้ตารางของภาษาเยอรมัน?
    • วิธีแก้ปัญหานั้นก็ง่ายดาย เพียงแต่ระบุแปะหน้าไปว่าข้อมูลของท่านนั้น ขอให้ใช้ตารางสำหรับภาษาไทยในการถอดรหัส
    • สิ่งที่ระบุแปะหน้าไปนั้น ก็เป็นที่เรียกกันว่า character set
    • วิธีแก้ปัญหาโดยการแปะหน้าด้วย character set ังกล่าวได้กลาย เป็นวิธีที่เป็นมาตรฐานแล้ว โดยระบบที่สนับสนุนการใช้หลายรหัสอักขระต้องมีวิธีระบุcharacter set อย่างใดอย่างหนึ่ง เพื่อแยกความแตกต่าง เช่น การระบุที่ส่วนหัวของเอกสารสำหรับ HTML (ดังที่จะแนะนำต่อไป) นอกจากนี้ยังสามารถใช้ escape sequenceเพื่อสลับภาษา (เช่น ใน Emacs ซึ่งใช้ISO/IEC 2022) หรือใช้Unicode (ซึ่งใช้ได้ในHTMLเช่นกัน แต่อยู่นอกเหนือขอบเขตของบทความนี้)
  3. แล้ว character set ของภาษาไทยมีหรือไม่? ถ้ามีมีชื่อว่าอะไร
    • มี และมีชื่อว่า tis-620, tis-620 เป็นที่ยอมรับกันในมาตรฐานสากล
    • [คัดลอกจาก http://software.thai.net/tis-620/index.html ประเทศไทยมีมาตรฐานอักขระซึ่งกำหนดโดย สำนักงานมาตรฐานอุตสาหกรรม ดังที่เรียกกันโดยทั่วไปว่ารหัส สมอ. แต่รหัส สมอ. หรือที่มีชื่อทางการว่า มอก.620 หรือ TIS-620 นี้ เป็นมาตรฐานของประเทศไทย ซึ่งเมื่อนำไปใช้บนเครือข่ายอินเทอร์เน็ต ก็อาจเกิดความเข้าใจไม่ตรงกันได้ ดังนั้นจึงมีความพยายามที่จะจดทะเบียน รหัส สมอ. ที่ Internet Assigned Numbers Authority (IANA) ซึ่งเป็นผู้ควบคุมมาตรฐานของเครือข่ายอินเทอร์เน็ต และได้ดำเนินการจดทะเบียนจนสำเร็จ เมื่อวันที่ 22 กันยายน 2541
  4. แล้ว character set ของภาษาอื่นๆ มีเช่นอะไรบ้าง
    • ภาษาของประเทศแถบยุโรปตะวันตก iso-8859-1
    • ภาษาของประเทศแถบยุโรปกลาง iso-8859-2
    • ภาษาญี่ปุ่น ใช้ euc_JP, iso-2022-jp และ Shift_JIS
  5. พอเข้าใจแล้ว ทีนี้ ถ้าจะแปะหน้าข้อมูลของข้าพเจ้าให้ชาวโลกรู้ว่าเป็นภาษาไทย ต้องทำอย่างไร
    • ถ้าเป็น Web Site (HTML file) สามารถทำได้โดยง่ายโดยเพียงเพิ่มบรรทัด
    • 
      <head>
      
      <meta http-equiv="Content-Type" content="text/html; charset=tis-620">
      
      </head>
      
      เข้าไปยังส่วนหัวของ HTML ไฟล์ของท่าน เพียงเท่านี้ก็เป็นอันเสร็จสิ้น
    • ในจดหมายอิเล็กทรอนิกส์ ติดตั้งให้โปรแกรมรับส่งจดหมายอิเล็กทรอนิกส์ของท่าน ให้ระบุในจดหมายว่า ข้อความของท่านถูกเข้ารหัสด้วย character-set tis-620 (วิธีการแตกต่างกันไปตามแต่ละ E-mail program)
  6. ปัจจุบันนี้ ข้าพเจ้าไม่เห็นจะต้อง set อะไร ชาวบ้านชาวช่องก็สามารถจะดู Web Site ของข้าพเจ้าได้ ถ้าตั้ง character set ดังที่ว่าแล้วจะได้ประโยชน์อะไรขึ้นมา
    • วิธีการระบุ character set เป็นวิธีที่ถูกต้องทั้งทางหลักการและทางปฏิบัติ Browser ที่เป็นที่นิยมใช้ในปัจจุบัน สามารถจะรับรู้ character-set ที่ท่านตั้งไว้ และเลือกแสดงเป็นภาษาไทยได้อย่างถูกต้องโดยที่ไม่ต้องติดตั้งค่าอะไรเพิ่่มเติม
    • Search engine ที่มาค้นข้อมูลในเพจของท่าน สามารถจะแยกแยะได้ทันทีว่านี่คือภาษาไทย ไม้มลายในเพจของท่านจะมีความหมายไม้มลาย Search engine จะไม่คิดว่ามันเป็น a umlaut อย่างแน่นอน
  7. Browser อะไรบ้างที่รู้จัก tis-620
    • Browser ที่ทันสมัยทุกเวอร์ชั่นรู้จัก tis-620
      • Internet Explorer เวอร์ชั่น 5.5 ขึ้นไป
      • Netscape Communicator Version 6 ขึ้นไป
      • Mozilla
      • Konqueror (KDE)
    • Netscape Version 4 หรือตำ่กว่า ไม่สนับสนุน tis-620 
    • การที่ Browser ไม่สนับสนุนไม่ได้หมายความว่า การใส่ character set เป็น tis-620 จะไม่มีประโยชน์ เพียงแต่จะไม่มีผลกระทบใดๆ ท่านจำเป็นต้องใช้กลเม็ด เพิ่มเติมที่จะทำให้ผู้ใช้อ่านภาษาไทยได้ต่อไป แต่ถ้าภายหลังผู้ใช้ upgrade Browser เป็น เวอร์ชั่นใหม่เมื่อใด ก็สามารถใช้ประโยชน์จาก character set ที่ตั้งไว้ทันที
  8. เว็บ ของผมใช้วิธีระบุ <FONT face=AngsanaUPC>...</FONT> อยู่ ก็สามารถบังคับให้ Browser แสดงฟอนต์ไทยที่ต้องการได้ ก็ไม่เห็นจะมีปัญหาอะไร ทำไมต้องตั้ง character set ให้ยุ่งยาก
    • วิธีระบุชนิดของฟอนต์ดังกล่าวนั้น เป็นการบอกว่า ในช่วงข้อความนี้ ถ้า Browser ของผู้เรียกดู Web ของท่าน มีฟอนต์ดังกล่าว ก็ขอให้ใช้ฟอนต์นั้นในการแสดงผล
    • แต่วิธีนี้ไม่ได้บอกแต่อย่างใดเลยว่าเอกสารของท่านเป็นเอกสารภาษาไ ทย
    • การระบุ <FONT face> เป็นสิ่งที่ทำได้ แต่ควรต้องควบคู่ไปกับการระบุ character set ด้วย
    • การที่ใช้ระบุแต่ <FONT face> โดยที่ไม่ได้ระบุ character set มีข้อเสียดังนี้
      • ถ้าเครื่องของผู้เรียกดู Web ของท่าน ไม่มีฟอนต์ดังกล่าว ก็จะนำฟอนต์อื่นๆ (ที่อาจจะไม่ใช่ฟอนต์ภาษาไทย) มาใช้ในการแสดงผล ทำให้ไม่สามารถอ่านภาษาไทยได้ตามต้องการ
      • เว็บเพจของท่านจะไม่มีความหมายในทางข้อมูลว่าเป็นภาษาไทย ไม่สามารถนำไปประมวลผลในทางภาษาต่างๆ ได้ เนื่องจากผู้คนทั่วโลกจะไม่เข้าใจว่า มันเป็นภาษาไทย
      • ปัจจุบัน ในทุกระบบปฏิบัติการมีการใช้ฟอนต์แบบ Unicode (2 byte) กันอย่างแพร่หลาย ฟอนต์แบบ Unicode สามารถเก็บรหัสอักขระได้ถึง 2^16 = 65,536 ตัว เก็บได้เกือบทุกภาษาในโลก การใช้ฟอนต์ Unicode ในการแสดงผลนั้น จำเป็นอย่างยิ่งที่ จะต้องทราบว่า เอกสารนี้เป็นภาษาใด เพื่อจะ Browser จะได้เลือกส่วนภาษานั้นๆ จาก ฟอนต์ Unicode (ซึ่งมีหลายภาษามาก) ออกมาแสดงผล ถ้าท่านระบุ Font face เป็นฟอนต์แบบ Unicode แต่ว่าไม่ระบุภาษา แล้ว Browser จะรู้ได้อย่างไรว่า ควรจะหยิบส่วนภาษาไทย ของฟอนต์นั้นๆ ออกมาแสดง?
  9. ผมใช้วิธีติดตั้ง character set เหมือนกัน แต่ว่าตั้งเป็น windows-874 ก็พบว่าใช้งานได้ดี Browser เรียกใช้ฟอนต์ภาษาไทยโดยอัตโนมัติ ทำไมต้องเปลี่ยนเป็น tis-620
    • ในทางเทคนิคแล้ว windows-874 เป็น character set ที่เป็น superset ของ tis-620 (คำว่า super set หมายถึงว่า อะไรที่ tis-620 มี นั้น windows-874 มี) ดังนั้น เมื่อดูผลที่ออกมาจึงทำงานได้เหมือนกันทุกประการ
    • windows-874 เป็น character set ที่ใช้ภายในระบบปฏิบัติการที่ผลิตโดยบริษัท ไมโครซอฟต์ เท่านั้น ไม่ได้เป็น character set ที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่างเครื่อง
    • tis-620 เป็น character set ที่จดทะเบียนถุกต้อง เป็นที่รับรู้กันทั่วโลก ทุกระบบปฏิบัติการ (แม้แต่ระบบปฏิบัติการของไมโครซอฟต์เอง)
    • windows-874 มีส่วนขยายเพื่อการแสดงผล เช่น bullet, smart quote, dash ฯลฯ ซึ่งไม่มีใน tis-620 และไม่มีในระบบปฏิบัติการอื่น ซึ่งจริงๆ แล้วไม่ได้เป็นเรื่องผิด ที่จะมีส่วนขยาย เพื่อที่จะใช้ภายในการทำงานของระบบปฏิบัติการเอง แต่ว่าเป็นเรื่องผิด ถ้านำไปใช้ใน การรับส่งข้อมูลระหว่างเครื่อง ระบบปฏิบัติการอื่นจะไม่เข้าใจรหัสเพิ่มเติมเหล่านี้ (และในทำนองเดียวกัน ในระบบปฏิบัติการอื่นๆ ก็จะมีส่วนขยายเพิ่มเติมภายใน ที่ ระบบปฏิบัติการของไมโครซอฟต์ไม่เข้าใจเช่นกัน)
    • การที่ตั้งเป็น windows-874 จะมีผลกับแค่ Browser ที่ทำงานอยู่บนระบบปฏิบัติการของไมโครซอฟต์เท่านั้น
    • การที่ตั้งเป็น tis-620 จะมีผลกับทุกระบบปฏิบัติการ  รวมทั้งระบบปฏิบัติการของไมโครซอฟต์ด้วย
  10. ผมใช้วิธีติดตั้ง character set เหมือนกัน แต่ว่าตั้งเป็น x-user-defined ใช้ได้เหมือนกันไหม
    • ไม่ได้ การใช้ character set นั้น มีขึ้นในยุคอดีต ที่เรายังไม่มี tis-620 ก็จึงใช้ x-user-defined ซึ่งทำให้ผู้ใช้ต้องตั้งที่ Browser ว่าควรจะใช้ฟอนต์ใดดีสำหรับ character set x-user-defined นี้ (ถ้าท่านเคยใช้ Netscape จนถึง Version 4 คงจำกันได้ดี ว่าท่านต้องติดตั้งค่าฟอนต์กันวุ่นวายก่อนที่จะเริ่มใช้งานภาษาไทยได้)
    • ปัจจุบันนี้เรามี tis-620 แล้ว และ Netscape ก็มีถึงเวอร์ชั่น 6 แล้ว รวมถึง Mozilla ซึ่งจะเป็นอนาคตของ Netscape browser นอกจากนี้ Internet Explorer ก็ทำงานได้ดี เรียกได้ว่าเรามีทุกอย่างที่ทันสมัยและถูกต้องตามหลักการแล้ว ไฉนใยจึงย้อนกลับไปใช้วิธีแก้ขัดอย่างสมัยก่อนอีก เปรียบได้กับยามน้ำท่วมเราก็เอากระสอบทรายมากั้นน้ำชั่วคราว ไม่ให้น้ำเข้าบ้าน ซึ่งก็เป็นสิ่งที่ถูก แต่เวลานี้น้ำลด ก็ควรใช้วิธีการสร้างที่ถูกต้องตามหลักวิชา วิเคราะห์สาเหตุ ขุดลอกคูคลองให้ถูกต้องไป แทนที่จะมาต้องใช้กระสอบทรายกันอีก
  11. ตัวอย่าง Web Site ที่ได้ทำการตั้ง Character set ให้เป็น tis-620 แล้วมีไหม จะทำการทดสอบได้อย่างไร
    • ท่านสามารถทดลองใช้ Browser ต่างๆ ที่แสดงไว้ในคำถามข้อก่อนหน้านี้ ไม่ว่าจะทำการบนระบบปฏิบัติการใด (ที่มีฟอนต์ไทยติดตั้งอย่างถูกต้อง) ลองชี้ไปที่ Web site เหล่านี้ ผลที่ได้คือ Browser เหล่านั้น ควรจะแสดงภาษาไทยได้อย่างถูกต้อง โดยที่ไม่ต้องเลือกภาษา, encoding อะไรพิเศษแต่อย่างใด

รายละเอียดเพิ่มเติม


สงวนลิขสิทธิ์แบบ GPL โดย ภัทระ เกียรติเสวี

$Id: tis-620.html,v 1.3 2002/12/09 12:05:27 ott Exp $