เรื่องวุ่น ๆ กับฟอนต์ภาษาไทยในคอมพิวเตอร์

Phachara Chirapakachote
Computer Science, KMITL
5 min readJun 24, 2024

ภาษาไทย ถือเป็นหนึ่งภาษาที่มีปัญหาเวลาแสดงผลมากที่สุดในคอมพิวเตอร์ ซึ่งสถิตินี้มาจากไหนน่ะเหรอ? ก็ไม่มีหรอกครับ เป็นความคิดของผมเอง(5555) แต่อย่าเพิ่งปิดหน้านี้หนีไปไหนกันครับ เพราะผมก็มั่นใจได้ว่าคนที่ทำงานไม่ว่าจะด้านออกแบบ เอกสาร เกม หรือแอปพลิเคชั่นมักจะเจอปัญหาพวกนี้อยู่เป็นประจำ ถือว่าเป็นปัญหาสามัญประจำบ้านเลยก็ว่าได้

ดังนั้นในบทความนี้จึงอยากจะมานำเสนอให้ทุกคนฟังว่าฟอนต์ภาษาไทยนั้น “มีกฏเกณฑ์ในการแสดงผลมากกว่าที่คิด” พร้อมกับพาไปดูกันว่า เหล่านักพัฒนาเขาแก้ไขปัญหานี้ยังไงกัน

กว่าจะมาเป็นตัวอักษรในหน้าจอ เค้าทำกันยังไง?

ในปัจจุบันนี้ โลกอินเทอร์เน็ตเต็มไปด้วยตัวอักษรมากมายจากหลายภาษาทั่วโลก ผู้อ่านเคยสงสัยไหมครับ ว่าคอมพิวเตอร์จัดเก็บตัวอักษรเหล่านี้ได้อย่างไร จึงสามารถเก็บข้อมูลตัวอักษรต่าง ๆ นี้ได้อย่างเป็นระเบียบ ไม่ตีกันระหว่างตัวอักษรภาษาจีน (เช่น “你”), ตัวอักษรภาษาอังกฤษ (เช่น “k”), ตัวอักษรภาษาไทย (เช่น “ช”), หรือแม้กระทั่ง emojis (เช่น “😄”) ทั้ง ๆ ที่ภายในคอมพิวเตอร์นั้น จริง ๆ แล้วรู้จักข้อมูลอยู่แค่สองแบบ คือ “1” กับ “0”?

มาตรฐาน ASCII

ภาพที่ 1: ตาราง ASCII

ในสมัยที่คอมพิวเตอร์ถูกสร้างขึ้นมายุคแรกๆนั้น จะรองรับแค่ตัวอักษรภาษาอังกฤษเป็นหลัก โดยมาตรฐานที่ชื่อว่า ASCII ถูกสร้างขึ้นมาเพื่อเก็บอักขระต่างๆที่ไม่ซ้ำกันเป็นตัวเลขในคอมพิวเตอร์ (ตัวอักษร 1 ตัวแทนตัวเลข 1 เลขตามภาพ)

มาตรฐาน ASCII ใช้เนื้อที่เพียง 7 บิตหรือประมาณ 1 ไบต์ในการเก็บข้อมูล ดังนั้นก็หมายความว่าสามารถใช้เก็บอักขระได้ 2⁷ = 128 ตัว คือตัวอักษรภาษาอังกฤษ 52 ตัวรวมตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก, ตัวเลข 10 ตัว, สัญลักษณ์พิเศษและคำสั่งพิเศษต่าง ๆ อีกหลักสิบตัว

สมมติว่าเราพิมพ์คำว่า Hello, World! ไปหาใครสักคน สิ่งที่คอมเห็นก็จะเป็นตัวเลขประมาณว่า 72 101 108 108 111 44 32 87 111 114 108 100 33 (ลองเทียบเลขฐานสิบในตารางดูได้เลยครับ)

แต่ว่าเมื่อเวลาผ่านพ้นไป คอมพิวเตอร์เริ่มแพร่หลายขึ้น คนทั่วไปมีโอกาสได้จับคอมพิวเตอร์บ้าง ตัวอักษรที่ใช้ระบบ ASCII ก็ดูจะไม่พอเสียแล้ว ดังนั้นมาตรฐานใหม่ที่ชื่อว่า Unicode จึงถือกำเนิดขึ้น

Unicode

ภาพที่ 2: ภาพจากเว็บไซต์ https://home.unicode.org

เราสามารถพูดได้ง่ายๆว่า Unicode คือมาตรฐานที่อัปเกรดมาจาก ASCII และยังเป็นระบบที่เป็นที่แพร่หลายมากที่สุดในปัจจุบัน โดยหลักการทำงานของมันคือตัวเลขทุกตัวจะถูกกำหนด code point หรือตัวเลขที่ไม่ซ้ำกันสำหรับแต่ละอักขระ ซึ่งตัวเลขพวกนี้จะถูกเก็บอยู่ในรูปแบบเลขฐานสิบหก (hexadecimal) ที่มีค่าตั้งแต่ 0x000000 ถึง 0x10FFFF แล้วมันดีกว่า ASCII ยังไงน่ะเหรอ? ด้วยระบบการจัดเก็บแบบนี้ ทำให้ Unicode สามารถเก็บอักขระได้มากถึง 1.1 ล้านตัว (ปัจจุบันใช้ไปแล้วประมาณ 13%) และที่ดีกว่านั้นคือมี backward compatibility กับ ASCII ด้วย!

ภาพที่ 3: ตารางเปรียบเทียบ Unicode และ ASCII

จะสังเกตเห็นได้ว่าตัว k และ X จะมีค่า Unicode Code Point กับ ASCII Code เป็นค่าเดียวกัน “Backward Compatibility” ในที่นี้ก็คือเราสามารถแปลงข้อความที่เข้ารหัสด้วยระบบ ASCII มาเป็น Unicode ได้อย่างง่ายดายนั่นเองครับ

อีกความเจ๋งของ Unicode ก็คือเราสามารถเก็บอักขระทุกตัวจากทุกภาษาบนโลก รวมถึงตัวอักษรโบราณ สัญลักษณ์ และอิโมจิต่าง ๆ ได้ด้วย ซึ่งมีเยอะขนาดนี้ก็ยังใช้ไม่หมด เรียกได้ว่ายังมีพื้นที่อีกเหลือเฟือเลยทีเดียว

ภาพที่ 3: ภาพอิโมจิของแต่ละระบบปฏิบัติการ (ข้อมูลปี 2016)

ดังนั้นสำหรับคนที่เคยใช้ระบบปฏิบัติการอย่าง Windows, MacOS, Android, IOS ก็อาจเคยสังเกตว่า “อิโมจิ” ของแต่ละระบบนั้นไม่เหมือนกันสักทีเดียว ทั้งนี้เป็นเพราะว่าคอมไม่ได้เก็บข้อมูลอิโมจิเป็นรูปภาพแต่เป็นตัวเลข และแต่ละระบบก็ใช้ภาพที่แทนตัวเลขนั้นๆไม่เหมือนกัน สิ่งที่แสดงออกมาจึงไม่ตรงกันเป๊ะ ๆ นั่นเอง

มาตรฐานการเข้ารหัส Unicode มีหลายแบบ ทุกคนอาจจะเคยได้ยินชื่อ UTF-8, UTF-16, UTF-32 ซึ่งตัวเลขด้านหลังคือจำนวนบิตที่ใช้เก็บอักขระ ๆ หนึ่ง — UTF-8 ถือเป็นมาตรฐานที่แพร่หลายที่สุดแล้ว เพราะพื้นที่ขนาด 8 บิตก็ยังใช้ไม่หมด ถ้าไปใช้ 16 หรือ 32 ต่อก็จะเป็นการเปลืองพื้นที่เสียเปล่า ดังนั้นเราจึงมักจะคุ้นตากับ UTF-8 มากกว่า เพราะเป็นวิธีที่ประหยัดเนื้อที่ในการจัดเก็บข้อมูลข้อความจำนวนมากได้ดีที่สุด

ฟอนต์ภาษาไทยกับปัญหาโลกแตกของเหล่าคนทำงานบนคอมพิวเตอร์

ภาพที่ 4: เรียงคำ ทิฏฐุชุกัมม์ กตัญญู ป่านนี้ ไข่ดาว สาวสุก ปฏิบัติ ปี่พาทย์ สิทธิ์ แบบแสดงผลผิด

ฟอนต์ อธิบายง่ายๆก็คือชุดของภาพตัวอักษรโดยจะมีการกำหนดว่า ตัวอักษร (Character) ตัวนี้ๆจะใช้ภาพ (Glyph) นี้แสดงผลออกมานะ สมมติผมบอกว่า “ก ไก่” glyph ของแต่ละฟอนต์ก็จะหน้าตาไม่เหมือนกัน ส่วนใหญ่ glyph ในฟอนต์จะกำหนดตัวเลขชัดเจน ว่ามีระยะห่างจากตัวก่อนหน้าเท่านี้ๆ ตัวหลังเท่านี้ๆ ส่วนสระและวรรณยุกต์ต่างๆก็กำหนดว่าจะเยื้องบนตัวอักษรมากเท่าไหร่ โดยส่วนใหญ่แล้วปัจจุบันจะใช้ Unicode เข้ารหัสกันหมดแล้ว

ปัญหา

ภาพที่ 5: ตาราง Unicode ภาษาไทย 87 ตัว (0E00–0E7F)

ตัวอักษรไทยใน Unicode นั้นมีอยู่ 87 ตัว ได้แก่พยัญชนะ สระ วรรณยุกต์ เลขไทย และสัญลักษณ์ต่างๆ ส่วนช่วงที่มีเส้นขีดพาด คือช่วงภาษาไทยที่ว่างอยู่ ยังไม่มีการกำหนดเพิ่มอักขระในช่วงนี้

ตารางนี้ยังไม่ได้รวมการแก้ไขปัญหาเรื่องวรรณยุกต์ลอย เพราะมีสระบน สระล่าง และวรรณยุกต์ ชุดเดียว

ปัญหาที่เรามักจะเจอในการทำงาน ไม่ว่าจะกับโปรแกรมเอกสาร นำเสนอ ออกแบบ ตัดต่อ หรือแม้กระทั่งการเรนเดอร์ฟอนต์เอง มักจะเป็นปัญหาวรรณยุกต์ลอยและจม (แต่คนชอบเรียกว่าสระลอย) ซึ่งเกิดจากการที่ glyph ของวรรณยุกต์มีชุดเดียว แต่เวลาเราเขียนจริงๆ มันไม่ได้อยู่ที่เดียวกัน เช่นคำว่า “ข่า” กับ “ป่า” ไม้เอกจะอยู่คนละที่กัน หรือคำว่า “นี้” ไม้โทก็จะจมไปซ้อนกับสระอี (ดูภาพที่ 4)

อีกปัญหาหนึ่งที่พบเจอบ่อยๆ จะเป็นการที่คอมมองว่า glyph แต่ละตัวเป็นอักขระแยกกันไปเลย ซึ่งเป็นเรื่องปกติในภาษาอังกฤษ แต่ไม่ใช่กับระบบสระและวรรณยุกต์ในภาษาไทย

ตัวอย่างฟอนต์ที่มีปัญหานี้ (https://pantip.com/topic/34456574)

จากภาพที่แสดงคำว่า “ทิฏฐุชุกัมม์ กตัญญู ป่านนี้ ไข่ดาว สาวสุก ปฏิบัติ ปี่พาทย์ สิทธิ์” ด้านบน จะสามารถสรุปกลุ่มคำที่มักมีปัญหาออกมาได้ตามนี้:

  1. มีวรรณยุกต์/ไม้ทัณฑฆาต — อาจจะลอยสูงเกินไปหรือไม่
  2. มีสระระดับบนและวรรณยุกต์/ไม้ทัณฑฆาต — สระอาจจะซ้อนกับวรรณยุกต์/ไม้ทัณฑฆาต
  3. ญ + ู — ที่ถูกต้องวาดออกมาเป็น “ญู” โดย ญ จะต้องถูกตัดเชิงออก (รวมถึง ฐ + ู เป็น “ฐู” ด้วย)
  4. ตัวอักษรที่มีเส้นลากยาวขึ้นข้างบน และสระระดับบน เช่น “ปี” — ที่ถูกต้อง ตัวสระต้องไม่ซ้อนกับตัวอักษร อาจจะเยื้องไปข้างหน้าแทน
  5. พ่วงด้วยวรรณยุกต์/ไม้ทัณฑฆาต — วรรณยุกต์/ไม้ทัณฑฆาตต้องไม่ซ้อนกับที่เหลือทั้งหมด

กลุ่มตัวอักษรที่มักจะเจอปัญหาบ่อยที่สุดคือกลุ่มตัวอักษรที่มีเส้นลากยาวขึ้นข้างบน ประกอบด้วย ป ฝ ฟ, กลุ่มตัวอักษรที่มีเชิง ประกอบด้วย ญ ฐ และสุดท้ายกลุ่มคำที่มีสระ-วรรณยุกต์ 2 ชั้นขึ้นไป เช่นคำว่า นี้ ปี่ ที่ คำที่มีตัวอักษรเหล่านี้เป็นสิ่งที่นักออกแบบจะเจอบ่อยสุด ๆ โดยเฉพาะในโปรแกรมตระกูล Adobe

จะเห็นได้ว่าภาษาไทยในคอมพิวเตอร์นั้นมีปัญหาเยอะมากกก ทั้ง ๆ ที่เวลาเราเขียนด้วยมืออาจไม่รู้สึกอะไร แต่พอมาถึงเรื่องในคอมพิวเตอร์แล้ว มันกลับซับซ้อนขึ้นมาก แต่ตรงนี้เราต้องเข้าใจว่า คอมพิวเตอร์ไม่ได้ฉลาดอย่างที่เราคิด แต่คนต้องเป็นคนกำกนดกฎเกณฑ์ให้มันทำงานได้ถูกต้องมากกว่า

ดังนั้นตอนนี้เราจะมาดูวิธีการแก้ปัญหาเรื่องน่าปวดหัวพวกนี้กันครับ

Solution 1: Glyph Substitution (GSUB)

วิธีแรกมีชื่อว่า Glyph Substitution หรือสามรถเรียกสั้นๆได้ว่า GSUB เป็นวิธีแก้ปัญหาฟอนต์ที่ค่อนข้างนิยมในสมัยก่อน และเราก็ยังอาจจะยังเห็นได้ในปัจจุบันอยู่ หลักการทำงานของมันคือการแทนที่ภาพตัวอักษร โดยเพิ่มอักขระพิเศษเข้าไป และจะใช้วิธีตรวจสอบว่า ตัวหนังสือที่อยู่ก่อนหน้าวรรณยุกต์นั้นเป็นตัวไหน แล้วค่อยทำการเลือกว่าจะใช้วรรณยุกต์ตัวไหน เช่น

  • ถ้าข้างหน้าวรรณยุกต์เป็นสระระดับบน ใช้วรรณยุกต์ที่อยู่สูงเพื่อหลบสระ
  • ถ้าข้างหน้าวรรณยุกต์เป็นพยัญชนะ ใช้วรรณยุกต์ที่อยู่ระดับต่ำการแก้ปัญหาด้วย GSUB จะต้องมีการเพิ่มอักขระพิเศษเข้าไปยัง Unicode Code Point ที่ว่างอยู่ อย่างภาพด้านบนนี้ ก็มีทั้งสระที่ตำแหน่งปกติ กับสระเยื้องซ้ายเพื่อหลบหาง ป ปลา นอกจากนี้ก็ยังมีสระลดรูป เครื่องหมายชุดบน และวรรณยุกต์ ที่ต้องกำหนดตำแหน่งพิเศษเพิ่มเข้ามา
ภาพที่ 6: สระชุดบนแบบปกติ (ภาพซ้ายบน) เยื้องซ้าย (ภาพซ้ายล่าง) / วรรณยุกต์แบบขยับล่าง เยื้องซ้ายล่าง ปกติ และเยื้องบนล่าง (ภาพขวา)
ภาพที่ 7: พยัญชนะ อักขระพิเศษ / ลดทอน (ภาพซ้าย) สระชุดล่างพิเศษ (ภาพขวา)

นี่ยังไม่นับรวมสระชุดล่างพิเศษและพยัญชนะที่มีการลดต่างๆ อย่าง ญ หญิง และ ฐ ฐาน ไม่มีเชิง ถึงแม้จะไม่ได้เห็นบ่อย แต่ก็มีคำไทยที่ต้องใช้ในกรณีนี้ เช่นคำว่า กตัญญู และ ทุฏฐุลละ (สังเกตว่าเชิงถูกแทนด้วยสระอุไปเลย)

ยังมีกรณีที่น่าสนใจอีกหลายกรณี ซึ่งผมแนะนำให้ไปอ่านต่อ ที่นี่ ครับ

วิธีนี้เป็นวิธีที่ใช้ในอดีต ก่อนที่ OpenType จะแพร่หลาย แต่ก็มีข้อเสียตรงที่การวางตำแหน่งจะยังตายตัวอยู่ การที่จะวางวรรณยุกต์ (และสระระดับบน) ให้ถูกต้องด้วยกฎตายตัวนั้นทำให้สวยได้ยาก เพราะมีกรณีจำนวนมากที่จะต้องจัดการในโค้ด รวมทั้งจำนวน Glyph และ Glyph Metrics ที่จะต้องโหลดเข้าไปอีก — 9tawan

มาดูตัวอย่างกับฟอนต์สารบรรณ (TH Sarabun New)

ภาพที่ 8: Part of TH Sarabun New glyph table

นี่คือส่วนหนึ่งของตารางอักขระจากฟอนต์สารบรรณ ซึ่งเป็นฟอนต์ที่อยู่ในตำแหน่งมาตรฐาน (0E00–0E7F) ครับ ก็จะมีตั้งแต่พยัญชนะ สระ วรรณยุกต์ เลขไทย และตัวอักษรพิเศษต่างๆ แต่พอเลื่อนลงไปดูจนถึง Unicode ที่ F700 เราก็จะเห็นตารางหน้าตาประมาณนี้

ภาพที่ 9: ตารางแสดงอักขระตั้งแต่ Unicode Code Point ที่ F700 ขึ้นไปของฟอนต์ TH Sarabun New

มองครั้งแรกอาจจะงงว่าทำไมมันมีวรรณยุกต์เยอะจัง ถึงแม้จะดูเหมือนตัวเดียวกัน แต่ถ้ามองดี ๆ ตำแหน่งของวรรณยุกต์แต่ละตัวนั้นไม่เหมือนกันเลยครับ ดังที่บอกไปว่า นี่คือการเพิ่มอักขระพิเศษเข้าไปเพื่อใช้ในกรณีพิเศษนั่นเอง และนอกจากนี้ก็จะเห็นตัว ฐ ญ ไม่มีเชิง รวมถึงอักขระพิเศษอื่น ๆ อีกด้วย!

ภาพที่ 10: หน้าตาฟอนต์ที่แสดงผลออกมาหลังจากแก้ปัญหาแล้ว: ก่อน (สีม่วง) หลัง (สีขาว)

และนี่ก็คือ Before — After ของการแสดงผลฟอนต์ที่มีปัญหา กับถูกแก้แล้วด้วยวิธี Glyph Substitution ครับ เป็นแค่ส่วนหนึ่งเท่านั้นแต่ก็น่าจะทำให้ทุกคนเห็นภาพได้มากขึ้น

สำหรับ GSUB กับมีประมาณนี้ แต่อย่างที่บอกไปครับ ว่าการใช้วิธีนี้ยังมีข้อจำกัดเรื่องของตำแหน่งอักขระที่ตายตัว และการเพิ่มจำนวนซึ่งก็กินพื้นที่เข้าไปอีก

Solution 2: Glyph Positioning (GPOS)

หากใครเคยลงฟอนต์ด้วยตัวเอง อาจจะเคยสังเกตส่ามักจะมีไฟล์อยู่สองแบบ คือ .ttf และ .otf มันคือรูปแบบที่นำเอาข้อมูลของฟอนต์ โดยย่อมาจาก TrueType Font และ OpenType Font

เอาเป็นว่า TrueType นั้นมาก่อน ส่วน OpenType นั้นมาทีหลังทำให้เทคโนโลยีใหม่กว่า กว้างกว่า และรองรับหลายอย่างได้มากขึ้น

OpenType เป็น super set ของ TrueType โดยมีการเพิ่มฟีเจอร์ต่าง ๆ เข้าไปในมาตรฐานเดิม สำหรับภาษาไทยก็มีฟีเจอร์ที่สามารถนำมาใช้เพื่อทำให้สามารถวาดตัวหนังสือได้ถูกต้อง อย่างการแทนภาพตัวอักษร หรือการวางตำแหน่งภาพตัวอักษรใหม่ (Glyph Positioning — GPOS) — 9tawan

ภาพที่ 11

ด้วยเทคโนโลยี OpenType เรามีเครื่องมือจัดตำแหน่งการวางซ้อนอักขระ โดยใช้ข้อมูล GPOS ซึ่งอาศัยการกำหนด anchor สำหรับวาง glyph ซ้อนกันเหมือนการต่อชิ้นส่วนเลโก้ อืม… ถ้าแค่พูดอาจจะไม่เข้าใจ แต่สำหรับ GPOS เนี่ย มีอยู่สองฟีเจอร์ที่จำเป็นครับ คือ mark-to-mark กับ mark-to-base เรามาดูตัวอย่างเสริมความเข้าใจกันดีกว่า

การจัดตำแหน่งโดยใช้การ mark คือการจับคู่กันระหว่างตัวอักษรสองตัว โดยตัวอักษรแต่ละตัวจะมีตำแหน่งตะขอ (anchor) อยู่ เราก็แค่เอาตะขอของตัวอักษรตัวหลังมาเกี่ยวกับตัวหน้าซะ ก็คือ เราจะเลื่อนตำแหน่งของภาพตัวอักษรที่อยู่ข้างหลังมาจนกว่าตำแหน่งตะขอของตัวหลังนั้นไปทับกับตัวหน้าครับ

ภาพที่ 12: ตัวอย่างการจัด Anchor

วิธีนี้ค่อนข้างซับซ้อน แต่ได้ตำแหน่งการจัดวางที่สวยงาม และไม่เปลือง Glyphs เพราะไม่ต้องใส่อักขระพิเศษเพิ่มเติมเข้าไปเป็นจำนวนมาก ซึ่งถือว่าเป็นการแก้ปัญหาแบบระยะยาว เพราะมีมาตรฐานชัดเจน และใช้ได้กับทุกฟอนต์ครับ

สรุป

ภาพที่ 13: เรียงคำเซ็ตเดิม แต่เป็นแบบที่แสดงผลถูกแล้ว

เรื่องของ typography หรือศาสตร์อักษรศิลป์เนี่ย ยังมีหลายอย่างมากกว่าที่คิดครับ ไหนจะเรื่องทฤษฎีการออกแบบ องค์ประกอบของฟอนต์ การจัดวางเลย์เอาต์ ฯลฯ

หลายคนอาจจะสงสัยว่าเราจะรู้เรื่องพวกนี้ไปทำไม แต่ผมมองว่าเรื่องนี้เป็นเรื่องใกล้ตัวกว่าที่คิดครับ และมั่นใจว่าใครที่เคยผ่านงานออกแบบมาต้องเคยเจอปัญหาเหล่านี้แน่นอน การที่เราได้เข้าใจความเป็นมาและรู้ว่าปัญหาต่าง ๆ เกิดจากอะไร แก้ยังไง มีคีย์เวิร์ดอะไรบ้าง จะทำให้เราเข้าใจโลกของคอมพิวเตอร์มากขึ้น และยิ่งสำหรับคนที่เรียนหรือทำงานสายคอม โดยเฉพาะนักสร้างเกม ผมคิดว่าองค์ความรู้ด้านนี้เป็นสิ่งที่ “รู้ไว้ใช่ว่า ใส่บ่าแบกหาม” ครับ

ภาพที่ 14: ภาพตัวอย่างการแปลไทยของเกม Resident Evil Village

ผมมองว่าระบบที่ซับซ้อนของภาษาไทย ทำให้ภาษาไทยมีเสน่ห์และมีเอกลักษณ์ แต่ในขณะเดียวกันเหล่าโปรแกรมเมอร์ก็ต้องเจอปัญหาเหล่านี้ ซึ่งวิธีการที่เขาใช้แก้ปัญหากันก็สุดยอดยิ่งกว่าอีกครับ

ยังไงก็ตาม สิ่งที่ผมนำมานำเสนอในบทความนี้เป็นเพียงส่วนหนึ่งของปัญหาอีกมากมายเท่านั้นครับ และวิธีการแก้ปัญหาก็ไม่ได้มีแค่นี้ แต่แตกต่างกันไปขึ้นอยู่กับคนทำ ส่วนใหญ่แล้วปัญหาที่เกิดขึ้นก็มักมาจากการที่ชาวต่างชาติเป็นคนออกแบบโปรแกรม รวมถึงเขียนสคริปต์ให้ฟอนต์ด้วย

บทความนี้เป็นเพียงการรวบรวมความรู้ ตีความ และนำเสนอความเข้าใจของผม หากมีข้อมูลอะไรผิดพลาดต้องขออภัยด้วย หวังว่าทุกคนจะได้รับความรู้ และสเน่ห์อันน่าปวดหัว (ฮา) ของภาษาไทยไปไม่มากก็น้อยนะครับ

บรรณานุกรม

  1. Papoj Thamjaroenporn. (2020). เล่นกับ Big Data ภาษาไทย ต้องเข้าใจ Unicode, Part 1. ค้นจาก https://bigdata.go.th/big-data-101/unicode-and-big-data-text-processing-part-1/
  2. Leo Charisma. (2012). ว่ากันด้วยเรื่องภาษาไทยใน UNICODE. ค้นจาก https://forum.f0nt.com/index.php?topic=19655.0
  3. CS50. (2021). CS50 2021 — Lecture 0 — Scratch. ค้นจาก https://www.youtube.com/watch?v=gMfBHd_i4aU
  4. Bettina Specht. (2016). Emoji Support in Email: Can Your Subscribers See Them?. ค้นจาก https://www.litmus.com/blog/emoji-support-in-email-can-your-subscribers-see-them/
  5. sarsnake. (2009). What is the difference between UTF-8 and Unicode?. ค้นจาก https://stackoverflow.com/questions/643694/what-is-the-difference-between-utf-8-and-unicode/643810#643810
  6. รหัสภาษาคืออะไร. (ม.ป.ป.). ค้นจาก https://www.quickserv.co.th/knowledge-base/technology/รหัสภาษาคืออะไร/
  7. ยุทธพงษ์ สืบภักดี. (2011). Fonts ปัญหาโลกแตกของนักออกแบบในเครื่องคอมพิวเตอร์. ค้นจาก http://www.yuttapong.com/?p=634
  8. Wutipong Wongsakuldej. (2017). เรื่อง render text ภาษาไทย. ค้นจาก https://www.facebook.com/groups/thaigamepad/posts/1705919399423940/
  9. Wikipedia. (2018). ปัญหาการเรียงพิมพ์อักษรไทย. ค้นจาก https://th.wikipedia.org/wiki/ปัญหาการเรียงพิมพ์อักษรไทย
  10. Thep. (2016). Thai Font Metrics. ค้นจาก http://thep.blogspot.com/2016/02/thai-font-metrics.html
  11. Wutipong Wongsakuldej. (2017). วิธีแก้ปัญหาสระลอยแบบระยะยาว. ค้นจาก https://9tawan.net/th/archives/969
  12. Wutipong Wongsakuldej. (2021). font-render-tester. ค้นจาก https://github.com/wutipong/font-render-tester

--

--