บทความทั้งหมด

Unicode Escape: ลำดับ \uXXXX หมายความว่าอย่างไร

อักษรไทยมีสระและวรรณยุกต์ที่ลอยอยู่เหนือหรือใต้พยัญชนะ เช่น ่ ้ ๊ ๋ ั ิ ี ึ ื ุ ู ซึ่งแต่ละตัวเป็นอักขระ Unicode ที่มีจุดรหัสของตัวเองแยกต่างหาก ดังนั้นคำไทยหนึ่งคำที่ดูเหมือนมีตัวอักษร 3 ตัว อาจกลายเป็นรหัส escape 4-5 ตัวเมื่อแปลงเป็น \uXXXX

ทำไมจำนวนรหัส escape ไม่ตรงกับจำนวนตัวอักษรที่มองเห็น

ตัวอย่างเช่นคำว่า "กี่" ที่เห็นเป็น 2 ตัวอักษรบนหน้าจอ จริง ๆ แล้วประกอบด้วยพยัญชนะ สระ อี และวรรณยุกต์เอก — สามจุดรหัสที่ต่างกัน แต่ละจุดกลายเป็นรหัส escape แยกกัน การตัดสตริงไทยกลางคันโดยไม่รู้กฎนี้อาจตัดวรรณยุกต์ออกจากพยัญชนะที่มันกำกับอยู่ ทำให้คำแสดงผลผิดเพี้ยน

JSON กับลำดับ escape

ข้อกำหนดของ JSON อนุญาตให้ escape อักขระใด ๆ ในสตริงเป็น \uXXXX ได้ สิ่งนี้พบได้บ่อยเมื่อข้อมูลถูกสร้างขึ้นโดยโปรแกรม และตัว serializer จงใจหลีกเลี่ยงอักขระนอก ASCII เพื่อความเข้ากันได้ — คำทักทายอย่าง "สวัสดี" อาจปรากฏใน JSON เป็นชุดรหัส escape หลายตัวติดกัน

เมื่อไหร่ที่จำเป็นต้องใช้

  • อ่านด้วยภาษาที่เข้าใจง่ายว่าข้อความใดซ่อนอยู่หลังลำดับ escape ในการตอบกลับ JSON ของ API
  • เตรียมสตริงสำหรับสภาพแวดล้อมที่ไม่ยอมรับอักขระนอก ASCII
  • วินิจฉัยปัญหาการเข้ารหัสเมื่อทำงานกับข้อมูลภายนอก โดยเฉพาะเมื่อสระหรือวรรณยุกต์หายไปอย่างผิดปกติ

ข้อผิดพลาดที่พบบ่อย: คู่ surrogate ที่ถูกตัดขาด

ทั้งสระ วรรณยุกต์ไทย และอิโมจิ ต่างก็เสี่ยงต่อการถูกตัดขาดกลางคันหากประมวลผลรหัส escape ทีละตัวโดยไม่ระวัง แต่กรณีของอิโมจิเป็นเรื่องคู่ surrogate สองตัวที่ประกอบเป็นอักขระเดียว ขณะที่กรณีของภาษาไทยเป็นเรื่องสระ-วรรณยุกต์หลายจุดรหัสที่ประกอบกันเป็นหนึ่ง "คำ" ที่มองเห็น ผลลัพธ์ของความผิดพลาดทั้งสองแบบคล้ายกัน: อักขระที่แสดงผลผิดเพี้ยนหรือสัญลักษณ์ตัวแทน "�"

ลองใช้เครื่องมือ