Emoji

Các ký hiệu hình ảnh được mã hóa trong Unicode. Dùng để biểu đạt trực quan cảm xúc và khái niệm trong giao tiếp văn bản.

Emoji là các ký hiệu hình ảnh được mã hóa trong Unicode, dùng để biểu đạt trực quan cảm xúc và khái niệm trong giao tiếp văn bản. Ban đầu được giới thiệu bởi nhà mạng di động Nhật Bản NTT DoCoMo năm 1999, chúng được đưa vào tiêu chuẩn quốc tế với Unicode 6.0 năm 2010. Tính đến năm 2024, hơn 3.000 emoji được đăng ký trong Unicode, với emoji mới được thêm hàng năm.

Cấu trúc nội bộ của emoji phức tạp hơn vẻ ngoài của chúng. Nhiều emoji nằm ngoài Basic Multilingual Plane (BMP), yêu cầu cặp thay thế trong UTF-16 (2 đơn vị mã). Hơn nữa, nhiều cơ chế kết hợp nhiều code point thành một emoji duy nhất: bộ sửa đổi tông da (Emoji Modifiers), chuỗi ZWJ (Zero Width Joiner) chỉ định giới tính, và Regional Indicator Symbols cho cờ. Ví dụ, "👨‍👩‍👧‍👦" (gia đình) bao gồm 7 code point (4 người + 3 ZWJ). Hướng dẫn Emoji và Unicode giải thích các cơ chế này chi tiết.

Kích thước byte khác nhau theo mã hóa. Trong UTF-8, emoji cơ bản tiêu tốn 4 byte, nhưng emoji phức hợp với chuỗi ZWJ yêu cầu nhiều hơn. Khi lưu trữ emoji trong cột VARCHAR cơ sở dữ liệu, MySQL yêu cầu mã hóa utf8mb4 (utf8 chỉ hỗ trợ tối đa 3 byte và không thể lưu emoji). Thiết kế cơ sở dữ liệu mà không biết ràng buộc này là cạm bẫy kinh điển gây ra lỗi khi lưu dữ liệu chứa emoji.

Cách các nền tảng mạng xã hội đếm emoji khác nhau. X (trước đây là Twitter) đếm mỗi emoji là 2 ký tự. Chú thích Instagram đếm chúng là 1 ký tự. Đối với SMS, tin nhắn chứa emoji chuyển sang mã hóa Unicode, giảm giới hạn ký tự mỗi tin nhắn từ 160 xuống 70 ký tự. Hiểu những khác biệt này quan trọng cho thiết kế tiếp thị và truyền thông.

Xử lý emoji trong lập trình cần cẩn thận. Thuộc tính .length của JavaScript đếm cặp thay thế là 2, vì vậy một emoji đơn có thể trả về độ dài 2 trở lên. Để có số ký tự emoji chính xác, bạn cần đếm theo đơn vị cụm grapheme sử dụng Array.from() hoặc Intl.Segmenter. Sách truyền thông mạng xã hội thảo luận cách sử dụng emoji hiệu quả.

Từ góc độ đếm ký tự, emoji là ví dụ điển hình của "trông như một ký tự nhưng đếm là nhiều". Kết quả khác biệt đáng kể tùy thuộc vào việc bạn đếm code point, đơn vị mã UTF-16, byte hay cụm grapheme. Khi triển khai công cụ đếm ký tự, xử lý đúng khoảng cách giữa "ký tự trực quan đơn" mà người dùng mong đợi và biểu diễn nội bộ là thiết yếu.