"กลับข้อความ" ฟังดูเหมือนเป็นการดำเนินการที่ง่ายที่สุด — แค่เรียงตัวอักษรย้อนกลับ แต่สำหรับข้อความภาษาไทย การกลับแบบทีละโค้ดพอยต์สร้างปัญหาที่ชัดเจนกว่าภาษาที่ใช้อักษรละตินมาก เพราะโครงสร้างของอักษรไทยเองผูกสระและวรรณยุกต์ไว้กับพยัญชนะฐานอย่างแนบแน่น
สระและวรรณยุกต์ไทยเป็นเครื่องหมายประกอบ
อักษรไทยหลายตัวอย่างสระบน สระล่าง และวรรณยุกต์ (เช่น ่ ้ ๊ ๋ ั ิ ี ึ ื ุ ู) ไม่ได้เป็นตัวอักษรอิสระ แต่เป็นเครื่องหมายประกอบ (combining mark) ที่ต้องวางต่อจากพยัญชนะฐานเสมอในลำดับโค้ดพอยต์ เช่นคำว่า "กิน" ประกอบด้วยพยัญชนะ "ก" ตามด้วยสระ "ิ" แล้วจึงตามด้วย "น" — ต่างจากอักษรละตินที่แทบทุกตัวอักษรเป็นหน่วยอิสระในตัวเอง
ทำไมการกลับแบบไร้เดียงสาถึงพังทุกอย่าง
ถ้ากลับสตริงตามโค้ดพอยต์ทีละตัวโดยไม่สนใจว่าตัวไหนเป็นเครื่องหมายประกอบ สระหรือวรรณยุกต์จะไปเกาะกับพยัญชนะคนละตัวที่ไม่เกี่ยวข้องกันเลย ผลลัพธ์ไม่ใช่แค่คำที่เรียงกลับด้าน แต่เป็นคำที่ประกอบสระ-วรรณยุกต์ผิดตำแหน่งไปทั้งหมด อ่านไม่ออกหรือแสดงผลผิดเพี้ยน
กราฟีมคลัสเตอร์คืออะไร
สิ่งที่มนุษย์มองว่าเป็น "อักขระที่มองเห็นหนึ่งตัว" บางครั้งใน Unicode ประกอบด้วยหลายโค้ดพอยต์ — พยัญชนะไทยหนึ่งตัวพร้อมสระและวรรณยุกต์ที่เกาะอยู่ก็นับเป็นตัวอย่างหนึ่ง เช่นเดียวกับอิโมจิครอบครัว (👨👩👧) ที่จริงแล้วคืออิโมจิหลายตัวเชื่อมกันด้วยตัวเชื่อมความกว้างศูนย์ กลุ่มแบบนี้เรียกว่ากราฟีมคลัสเตอร์
การกลับข้อความที่ถูกต้อง
การทำอย่างถูกต้องคือแบ่งสตริงออกเป็นกราฟีมคลัสเตอร์ก่อน (นับพยัญชนะฐานพร้อมสระและวรรณยุกต์ที่เกาะอยู่เป็นหน่วยเดียว) แล้วจึงกลับลำดับของคลัสเตอร์เหล่านั้น ไม่ใช่กลับโค้ดพอยต์แต่ละตัวภายในคลัสเตอร์
ใช้ทำอะไรได้บ้าง
- ตรวจสอบพาลินโดรมหรือสร้างเอฟเฟกต์ข้อความ "สะท้อนกระจก"
- สาธิตหรือวินิจฉัยบั๊กการจัดการ Unicode ในโค้ด
- งานเพื่อความบันเทิงหรือการเรียนรู้ที่ต้องการกลับข้อความภาษาไทยหรืออิโมจิให้ถูกต้อง