UTF-8
Bảng mã Unicode có độ dài thay đổi. Bảng mã ký tự thống trị trên web, được sử dụng bởi hơn 98% trang web.
UTF-8 là bảng mã ký tự có độ dài thay đổi để triển khai Unicode. Nó biểu diễn ký tự trong 1 đến 4 byte, duy trì tương thích hoàn toàn với ASCII trong khi hỗ trợ tất cả ký tự Unicode trên toàn thế giới. Tính đến năm 2024, hơn 98% trang web sử dụng UTF-8, khiến nó trở thành bảng mã ký tự tiêu chuẩn thực tế trên internet.
UTF-8 trở thành tiêu chuẩn web vì nhiều lý do. Tương thích ASCII nghĩa là các giao thức dựa trên ASCII hiện có (HTTP, SMTP, URL) và công cụ hoạt động không thay đổi. Nó không có vấn đề thứ tự byte (endianness) và không yêu cầu BOM (Byte Order Mark). Nó cũng có tính năng tự đồng bộ, cho phép xác định ranh giới ký tự từ bất kỳ điểm nào trong luồng byte, khiến nó có khả năng chống chịu hỏng dữ liệu.
Trong HTML, bảng mã ký tự được khai báo bằng <meta charset="UTF-8">. Không có khai báo này, trình duyệt có thể nhận dạng sai mã hóa, gây ra văn bản lỗi. Nó cũng có thể được chỉ định qua header phản hồi HTTP Content-Type: text/html; charset=utf-8, và chỉ định cả hai là phương pháp tốt nhất.
Xử lý UTF-8 trong cơ sở dữ liệu cần chú ý. Bộ ký tự utf8 của MySQL trong lịch sử chỉ hỗ trợ tối đa 3 byte, không thể lưu trữ ký tự 4 byte (như emoji). Để lưu trữ tất cả ký tự Unicode bao gồm emoji, phải sử dụng utf8mb4. UTF8 của PostgreSQL hỗ trợ 4 byte ngay từ đầu.
Đối với đếm ký tự, hiểu sự khác biệt giữa số byte UTF-8 và số ký tự là quan trọng. "Hello" là 5 ký tự và 5 byte trong UTF-8, nhưng "こんにちは" là 5 ký tự nhưng 15 byte (3 byte × 5 ký tự). Vì kích thước cột cơ sở dữ liệu và giới hạn kích thước tệp thường được chỉ định bằng byte, cần biết cả số ký tự và số byte. Hiển thị cả hai trong công cụ đếm ký tự giúp người dùng xử lý các ràng buộc khác nhau.