- RFC 9839 นิยาม อักขระยูนิโค้ดที่เป็นปัญหา ซึ่งอาจอยู่ในฟิลด์ข้อความระหว่างการพัฒนาซอฟต์แวร์ไว้อย่างชัดเจน
- RFC นี้กล่าวถึงปัญหาจากการที่ ภาษาและไลบรารีที่แตกต่างกัน จัดการกับอักขระเหล่านี้ได้ไม่สอดคล้องกัน
- ใน 9839 มีการเสนอ ชุดย่อยสามแบบ ที่มีปัญหาน้อยกว่า เพื่อให้เลือกใช้งานได้ตามต้องการ
- เมื่อเทียบกับ PRECIS framework เดิมแล้ว นำไปใช้ได้ง่ายและเรียบง่ายกว่า
- มีการเผยแพร่ ไลบรารีภาษา Go สำหรับ RFC 9839 ควบคู่กันไป เพื่อช่วยให้ใช้งานจริงได้สะดวกขึ้น
ภูมิหลังและภาพรวมของ RFC 9839
- ยูนิโค้ดถูกใช้เป็นมาตรฐานในการจัดการข้อมูลข้อความแทบทุกประเภท
- แต่ในการออกแบบโครงสร้างข้อมูลหรือโปรโตคอลจริง หากอนุญาตอักขระยูนิโค้ดทั้งหมด อาจทำให้เกิดปัญหาได้
- Paul Hoffman และผู้เขียนได้ส่ง individual draft ไปยัง IETF เพื่อเสนอเกณฑ์ที่ชัดเจนต่อปัญหายูนิโค้ดที่เกิดซ้ำอยู่เรื่อย ๆ
- หลังจากการหารือเป็นเวลา 2 ปี จึงได้รับการรับรองเป็นมาตรฐานอย่างเป็นทางการและประกาศเป็น RFC 9839
- เอกสารนี้อธิบายอย่างละเอียดถึง ประเภทของอักขระที่เป็นปัญหา เหตุใดจึงเป็นปัญหา (ทั้งในเชิงเทคนิคและเชิงมาตรฐาน) และชุดย่อยสามแบบที่ผู้ใช้สามารถเลือกใช้ได้
เนื้อหาหลักของ RFC 9839
- เป็นเอกสารที่ควรอ้างอิงโดยจำเป็นเมื่อต้องออกแบบ ฟิลด์ข้อความ ในซอฟต์แวร์และสภาพแวดล้อมเครือข่าย
- RFC 9839 มีความยาว 10 หน้า ซึ่งถือว่าค่อนข้างกระชับเมื่อเทียบกับเอกสารมาตรฐานของ IETF
- อธิบายไว้ให้เข้าใจง่าย โดยมุ่งไปที่นักพัฒนาซอฟต์แวร์และวิศวกรเครือข่ายเป็นหลัก
ตัวอย่างอักขระยูนิโค้ดที่เป็นปัญหา
การออกแบบของ JSON และข้อจำกัด
- ไม่ใช่ความรับผิดของ Doug Crockford ผู้สร้าง JSON
- JSON ถูกออกแบบขึ้นในช่วงที่ยูนิโค้ดยังไม่เติบโตเต็มที่ จึงไม่สามารถจำกัดชุดอักขระได้อย่างเข้มงวด
- ตอนนี้ไม่สามารถเปลี่ยนมาตรฐานได้แล้ว จึงจำเป็นต้องใช้วิธี ตัดอักขระที่เป็นปัญหาออกตามประสบการณ์ที่พบจริง
ความแตกต่างจาก PRECIS framework ของ IETF
- ก่อน RFC 9839 ในปี 2025 ทาง IETF ก็มีมาตรฐานหลากหลายฉบับ เช่น RFC 8264 (PRECIS Framework)
- framework นี้อธิบายวิธีการปรับแต่ง การประยุกต์ใช้ และการเปรียบเทียบสตริงสากลไว้อย่างละเอียด
- มีความยาว 43 หน้า และ ครอบคลุมทั้งคำอธิบายพื้นหลังและแนวทางแก้ปัญหา
- PRECIS พึ่งพาเวอร์ชันของยูนิโค้ดอย่างมาก และมีข้อเสียคือซับซ้อนและนำไปใช้ได้ยาก
- RFC 9839 กระชับและเน้นการใช้งานจริงมากกว่า ทำให้ นำไปใช้ได้รวดเร็ว เมื่อต้องนิยามโปรโตคอลใหม่
ชุดย่อยของ RFC 9839 และตัวอย่างการใช้งาน
- 9839 นำเสนอชุดย่อยที่ใช้งานได้จริง 3 แบบ ได้แก่ scalars, XML และ assignables
- แต่ละชุดย่อยมีขอบเขตของอักขระที่เป็นปัญหาซึ่งจะถูกตัดออกแตกต่างกันเล็กน้อย
- ต่อไปนี้คือสรุปตารางว่าฟอร์แมตข้อมูลหลัก ๆ และชุดย่อยของ RFC 9839 จัดการกับอักขระที่เป็นปัญหาอย่างไร
- ฟอร์แมตบางชนิด เช่น CBOR, TOML, XML, YAML จะตัด surrogate หรืออักขระควบคุมออกบางส่วน
- I-JSON ตัด surrogate และ noncharacter ออก
- JSON ทั่วไป, Protobufs ไม่ได้ตัดออก
- XML, YAML เนื่องจากคุณสมบัติของ charset จึงตัด noncharacter/โค้ดควบคุมออกได้เพียงบางส่วน
- หมายเหตุ: XML และ YAML ไม่ได้ตัด noncharacter ที่อยู่นอก Basic Multilingual Pane ออก
ไลบรารี RFC 9839 สำหรับภาษา Go
- มีการเผยแพร่ไลบรารี Go ขนาดเล็กที่รองรับ การตรวจสอบอักขระ สำหรับชุดย่อยทั้งสามของ RFC 9839
- มีการทดสอบอย่างเพียงพอแล้ว แต่การปรับแต่งประสิทธิภาพยังอยู่ระหว่างดำเนินการ
- ยินดีรับการทดสอบและข้อเสนอแนะจากการใช้งานจริง
ความสำคัญของ RFC 9839 และกระบวนการทำงาน
- RFC 9839 ผ่านการรับฟังความคิดเห็นจากผู้เขียนร่วมหลายครั้ง และมีการแก้ไข draft มากกว่า 15 รอบก่อนประกาศอย่างเป็นทางการ
- ด้วยการอภิปรายและการมีส่วนร่วมจากผู้เชี่ยวชาญในชุมชนจำนวนมาก จึงพัฒนาเป็น เอกสารที่สมบูรณ์กว่าร่างแรกอย่างมาก
- มีการระบุผู้มีส่วนร่วมไว้ในส่วน “Acknowledgements”
ประสบการณ์จากการส่ง RFC แบบ individual submission
- RFC 9839 ดำเนินการในรูปแบบ individual submission
- เมื่อเทียบกับวิธีดั้งเดิมผ่าน Working Group แล้ว มี ภาระทั้งด้านความพยายามและขั้นตอน มากกว่า
- เมื่อเทียบกับประสบการณ์ในการเข้าร่วม Working Group วิธีดั้งเดิมมีประสิทธิภาพมากกว่าและน่าแนะนำกว่า
ยังไม่มีความคิดเห็น