UTF-16

Encoding & Standards

Kiểu mã hóa Unicode có chiều rộng thay đổi, dùng 2 hoặc 4 byte cho mỗi ký tự, được JavaScript, Java và Windows dùng nội bộ.

UTF-16 uses 16-bit code units. Characters in the Basic Multilingual Plane (U+0000 to U+FFFF) use one code unit (2 bytes). Characters above U+FFFF — including most emoji — require a surrogate pair (4 bytes).

This is why JavaScript's `string.length` can be surprising with emoji: `'😀'.length` returns 2 (two UTF-16 code units), not 1. Developers must use spread syntax (`[...'😀'].length`) or `Array.from()` for correct counting.

UTF-16 exists in two byte orders: UTF-16LE (little-endian, used by Windows) and UTF-16BE (big-endian). A BOM character can indicate which is used.

Thuật ngữ liên quan

BOM (BOM) BOM (BOM)
Byte Order Mark (U+FEFF) được đặt ở đầu tệp văn bản để chỉ thứ tự byte (endianness) trong các mã hóa UTF-16/UTF-32.
Code Unit Code Unit
Tổ hợp bit tối thiểu dùng để mã hóa một ký tự: 8 bit cho UTF-8, 16 bit cho UTF-16 và 32 bit cho UTF-32.
Supplementary Multilingual Plane (SMP) Supplementary Multilingual Plane (SMP)
Unicode Plane 1 (U+10000 đến U+1FFFF), nơi phần lớn các điểm mã emoji được phân bổ.
Surrogate Pair Surrogate Pair
Hai đơn vị mã UTF-16 (một surrogate cao U+D800-U+DBFF theo sau là một surrogate thấp U+DC00-U+DFFF) cùng nhau đại diện cho một ký tự trên U+FFFF.
UTF-32 UTF-32
Kiểu mã hóa Unicode có chiều rộng cố định, dùng đúng 4 byte cho mỗi ký tự, cho phép ánh xạ trực tiếp điểm mã nhưng tốn nhiều bộ nhớ …
UTF-8 UTF-8
Kiểu mã hóa Unicode có chiều rộng thay đổi, dùng từ 1 đến 4 byte cho mỗi ký tự, thống trị trên web (98%+ website sử dụng).

Công cụ liên quan

🔢 Tra cứu Unicode Tra cứu Unicode
Nhập codepoint như U+1F600 để nhận emoji, chi tiết mã hóa, byte UTF-8/16 và HTML entity.