onlinetools.dev

ตัวตรวจสอบอักขระยูนิโค้ด

ดูจุดรหัส ไบต์ UTF-8/UTF-16 และรูปแบบ escape ของทุกอักขระ

ทำงานในเครื่อง
loading…
เกี่ยวกับเครื่องมือนี้

วางข้อความใด ๆ แล้วดูอักขระแต่ละตัวถูกผ่าออก: จุดรหัสของมัน (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 หนึ่งไบต์ ส่วนขยายละตินส่วนใหญ่สองไบต์ อักษรจีน-ญี่ปุ่น-เกาหลีสามไบต์ อิโมจิสี่ไบต์ หากระบบใดตัดข้อมูลกลางลำดับ คุณจะได้อักขระแทนที่ (�) — มุมมองไบต์แสดงให้เห็นว่ารอยตัดแบบนั้นจะตกลงตรงไหน
เครื่องมือที่เกี่ยวข้อง