ตัวตรวจสอบอักขระยูนิโค้ด
ดูจุดรหัส ไบต์ UTF-8/UTF-16 และรูปแบบ escape ของทุกอักขระ
เกี่ยวกับเครื่องมือนี้
วางข้อความใด ๆ แล้วดูอักขระแต่ละตัวถูกผ่าออก: จุดรหัสของมัน (U+XXXX) ไบต์ UTF-8 หน่วย UTF-16 ลำดับ escape ของ JavaScript เอนทิตี HTML และหมวดหมู่ทั่วไป — พร้อมยอดรวมของจุดรหัส หน่วย UTF-16 ไบต์ UTF-8 และอักขระตามที่ผู้ใช้รับรู้ (กลุ่มกราฟีม)
นี่คือเครื่องมือสำหรับช่วงเวลา “ทำไมสตริงนี้ประหลาดจัง”: อักขระที่มองไม่เห็น (ช่องว่างความกว้างศูนย์ BOM เครื่องหมายกำกับทิศทาง) จะโผล่มาเป็นแถวที่มองเห็นได้ อักขระที่หน้าตาคล้ายกัน (а ซีริลลิก กับ a ละติน) จะเผยว่ามีจุดรหัสต่างกัน และอิโมจิที่ “เป็นอักขระเดียว” กลับกลายเป็นเจ็ดจุดรหัสที่เชื่อมด้วยตัวเชื่อมความกว้างศูนย์
ยอดรวมความยาวสี่แบบตอบคำถามอมตะว่าทำไม .length ของ JavaScript ขีดจำกัดไบต์ของฐานข้อมูล และสิ่งที่ผู้ใช้เห็น จึงไม่เคยเห็นตรงกันว่าสตริงหนึ่งยาวเท่าใด
คำถามที่พบบ่อย
- ทำไม "🎉".length === 2 ใน JavaScript?
- สตริงใน JavaScript นับเป็นหน่วยรหัส UTF-16 อักขระที่อยู่เหนือ U+FFFF — รวมถึงอิโมจิส่วนใหญ่ — ต้องใช้คู่ surrogate ซึ่งเท่ากับสองหน่วย ตัวตรวจสอบนี้แสดงทั้งหน่วยและจุดรหัสจริง และส่วนสรุปก็นับแยกกัน
- กลุ่มกราฟีมคืออะไร?
- คือสิ่งที่ผู้อ่านรับรู้ว่าเป็นอักขระหนึ่งตัว é อาจเป็นสองจุดรหัส (e + เครื่องหมายเสริม) และอิโมจิครอบครัวอาจเป็นเจ็ดตัวขึ้นไปที่เชื่อมด้วยตัวเชื่อมความกว้างศูนย์ การนับกราฟีมใช้ Intl.Segmenter ของเบราว์เซอร์ — ซึ่งใกล้เคียงที่สุดกับ “อักขระอย่างที่ผู้ใช้เห็น”
- จะหาอักขระที่มองไม่เห็นในสตริงได้อย่างไร?
- วางมันที่นี่ — ทุกจุดรหัสจะได้แถวของตัวเอง รวมถึงช่องว่างความกว้างศูนย์ (U+200B) ช่องว่างไม่ตัดคำ (U+00A0) BOM (U+FEFF) และเครื่องหมายกำกับทิศทาง โดยมีหมวดหมู่กำกับไว้ สิ่งเหล่านี้คือตัวการคลาสสิกเบื้องหลังสตริงที่ “เหมือนกัน” แต่เทียบเท่ากันไม่ผ่าน
- ลำดับไบต์ UTF-8 บอกอะไรฉัน?
- บอกสิ่งที่จะถูกเก็บหรือส่งจริง ๆ: ASCII หนึ่งไบต์ ส่วนขยายละตินส่วนใหญ่สองไบต์ อักษรจีน-ญี่ปุ่น-เกาหลีสามไบต์ อิโมจิสี่ไบต์ หากระบบใดตัดข้อมูลกลางลำดับ คุณจะได้อักขระแทนที่ (�) — มุมมองไบต์แสดงให้เห็นว่ารอยตัดแบบนั้นจะตกลงตรงไหน