Giới thiệu về bảng mã Unicode

Unicode là chuẩn biểu diễn và quản lý kí tự trong hầu hết các ngôn ngữ trên thế giới. Hầu như tất cả các phần mềm hiện đại làm việc với văn bản đều hỗ trợ Unicode. Tiêu chuẩn này được duy trì bởi tổ chức Unicode Consortium. Mỗi năm lại có một phiên bản mới hơn của tiêu chuẩn Unicode. Unicode phiên bản đầu tiên 1.0.0 được xuất bản vào tháng 10 năm 1991.

Code point và Code unit

Có hai khái niệm căn bản để có thể hiểu về Unicode:

  • Code point: là một số biểu diễn một kí tự Unicode.
  • Code unit: các code point được mã hóa bởi một hoặc nhiều code unit. Mọi code unit đều có cùng kích thước, kích thước này được xác định từ định dạng mã hóa được sử dụng. Định dạng mã hóa phổ biến nhất là UTF-8 ở đó mỗi code unit đều có kích thước 8 bit.

Code point

Trong phiên bản Unicode đầu tiên mỗi code point có kích thước 16 bit. Từ đó trở đi, số lượng ký tự tăng lên nhanh chóng, kích thước code point được mở rộng lên thành 21 bit cho đến ngày nay. 21 bit này được chia làm 17 plane, mỗi plane có kích thước 16 bit:

  • Plane 0: Basic Multilingual Plane (BMP), từ 0x0000 - 0xFFFF
    • Chứa các kí tự của hầu hết các ngôn ngữ (kí tự Latin, kí tự châu Á…) và nhiều kí hiệu khác.
  • Plane 1: Supplementary Multilingual Plane (SMP), 0x10000 - 0x1FFFF
    • Hỗ trợ các ký tự cổ đại (như chữ cái Ai cập) và các hệ thống kí tự được bổ sung thêm.
    • Hỗ trợ các emoji và nhiều kí hiệu khác.
  • Plane 2: Supplementary Ideographic Plane (SIP), 0x20000 - 0x2FFFF
    • Chứa các kí tự tượng hình của ba nước Trung, Nhật, Hàn (CJK).
  • Plane 3 – 13: Chưa dùng đến
  • Plane 14: Supplementary Special-Purpose Plane (SSP), 0xE0000 - 0xEFFFF
  • Plane 15-16: Supplementary Private Use Area (S PUA A/B), 0x0F0000 - 0x10FFFF

Các định dạng mã hóa: UTF-32, UTF-16, UTF-8

UTF-32

Với UTF-32, mỗi code unit chứa một code point. Tức ta có quan hệ 1-1 giữa code point và code unit. Cho nên phương pháp mã hóa này còn được gọi là fixed-length encoding (mã hóa có chiều dài cố định).

UTF-16

Với UTF-16, kích thước mỗi code point là 16 bít. Các code point được mã hóa bởi một hoặc 2 code unit theo quy tắc sau:

  • Trong BMP: mỗi code point mã hóa bởi một code unit.
  • Trong các plane còn lại: mỗi code point mã hóa bởi hai code unit.

UTF-8

Các code unit có kích thước 8 bít trong UTF-8. Nó dùng từ 1 đến 4 code unit để mã hóa các code point:

Code pointCode unit
0000-007F0bbbbbbb (7 bit)
0080-07FF110bbbbb, 10bbbbbb (5+6 bit)
0800-FFFF1110bbbb, 10bbbbbb, 10bbbbbb (4+6+6 bit)
10000-1FFFFF11110bbb, 10bbbbbb, 10bbbbbbbb, 10bbbbbbbb (3+6+6+6 bit)

Các định dạng mã hóa được sử dụng trong phát triển web

Hai định dạng mã hóa được dùng trong phát triển web là UTF-16 và UTF-8.

Mã nguồn sử dụng UTF-16

JavaScript biểu diễn mã nguồn theo định dạng mã hóa UTF-16.

Chuỗi

Các kí tự trong JavaScript cũng được mã hóa theo định dạng UTF-16

Mã nguồn trong file

Đối với file chứa mã nguồn, JavaScript và HTML sử dụng định dạng mã hóa UTF-8.