Cập nhật lần cuối:

Một emoji được đếm là mấy ký tự? - Vì sao 1 emoji không phải lúc nào cũng là 1 ký tự

Khoảng 5 phút đọc

Một emoji mặt cười có phải là 1 ký tự không? Thế còn emoji gia đình? Thực ra thứ trông như 1 emoji trên màn hình có thể là cả một chuỗi nhiều ký tự ghép lại. Bạn đã bao giờ gặp cảnh "rõ ràng còn dư chỗ 1 ký tự mà gõ mãi không được" trên X (trước là Twitter) chưa?

Cách đếm ký tự của emoji

EmojiNhìn thấySố ký tự UnicodeĐộ dài UTF-16Số byte UTF-8
Mặt cười1 hình1 ký tự24 byte
Ngón cái (like)1 hình1 ký tự24 byte
Ngón cái đổi màu da1 hình2 ký tự48 byte
Gia đình1 hình7 ký tự1125 byte
Cờ cầu vồng1 hình4 ký tự614 byte
Cờ Nhật Bản1 hình2 ký tự48 byte

Emoji gia đình nhìn thì chỉ là 1 hình, nhưng ruột bên trong là "người nam + ký tự nối + người nữ + ký tự nối + bé gái + ký tự nối + bé trai", tổng cộng 7 ký tự.

Vì sao số ký tự của emoji lại chẳng cái nào giống cái nào?

Cơ chếGiải thíchVí dụ
Emoji cơ bản1 code point = 1 ký tựMặt cười (U+1F600)
Biến thể màu daEmoji cơ bản + ký tự chỉ màu da = 2 ký tựNgón cái đổi màu da = ngón cái + màu da
Ghép bằng ZWJNhiều emoji nối với nhau bằng ký tự vô hìnhGia đình = nam + ZWJ + nữ + ZWJ + bé gái + ZWJ + bé trai
Cờ quốc giaGhép 2 ký tự chỉ báo vùng (regional indicator)Cờ Nhật = J + P

ZWJ là viết tắt của "Zero Width Joiner" - ký tự nối có độ rộng bằng không. Nó không hiện ra trên màn hình nhưng vẫn được đếm là một ký tự.

Các mạng xã hội đếm emoji thế nào

Dịch vụMặt cười đếm làGia đình đếm làCách đếm
X (trước là Twitter)2 ký tự2 ký tựMọi emoji đều tính trọng số 2 cố định
Instagram1 ký tự1 ký tựĐếm theo hình nhìn thấy
LINE1 ký tự1 ký tựĐếm theo hình nhìn thấy
SMSThêm 1 emoji là cả tin chuyển sang giới hạn 70 ký tựTương tựĐổi bảng mã (encoding)

Trên X, mọi emoji đều được tính trọng số 2, bất kể cấu tạo đơn giản hay phức tạp - emoji gia đình gồm 7 ký tự Unicode cũng chỉ tính là 2. Dù vậy, dùng nhiều emoji vẫn ngốn bớt chỗ dành cho chữ trong giới hạn trọng số 280. Như đã nhắc trong bài lịch sử giới hạn ký tự của X, cách xử lý emoji chính là hình ảnh thu nhỏ cho độ rắc rối của việc đếm ký tự.

SMS và mối duyên nợ khó ngờ với emoji

Với SMS (tin nhắn ngắn), chỉ cần thêm đúng 1 emoji là giới hạn ký tự của cả tin nhắn thay đổi.

Điều kiệnSố ký tự mỗi tinBảng mã
Chỉ có chữ cái Latin và số160 ký tựGSM-7 (7 bit)
Chỉ có tiếng Nhật70 ký tựUCS-2 (16 bit)
Có emoji70 ký tựChuyển sang UCS-2

SMS tiếng Anh cho phép 160 ký tự mỗi tin, nhưng chỉ cần chèn 1 emoji là toàn bộ tin nhắn bị chuyển sang bảng mã UCS-2 và giới hạn tụt xuống 70 ký tự. Mất đứt 90 ký tự chỉ vì đúng 1 emoji.

Số lượng emoji tăng không ngừng

NămPhiên bản UnicodeTổng số emojiEmoji mới đáng chú ý
20106.0Khoảng 720Mặt, động vật, đồ ăn cơ bản
20158.0Khoảng 1.620Biến thể màu da
202013.0Khoảng 3.300Ninja, trà sữa trân châu
202416.0Khoảng 3.790Vân tay, đàn hạc, vết mực loang

Emoji cứ tăng dần theo từng năm, đến 2024 đã có khoảng 3.790 loại. Bộ emoji điện thoại đầu tiên (NTT DoCoMo, 1999) chỉ có 176 hình. Sau 25 năm, con số đã nhân lên hơn 20 lần.

Lập trình và số ký tự của emoji

Đếm cho đúng số ký tự của emoji trong lập trình hóa ra là bài toán rất khó.

Ngôn ngữKết quả .length của emoji gia đìnhLý do
JavaScript11Đếm theo code unit UTF-16
Python7Đếm theo code point Unicode
Swift1Đếm theo grapheme cluster (ký tự nhìn thấy)

Cùng một emoji mà tùy ngôn ngữ lập trình, "độ dài" trả về khác hẳn nhau: khi thì 1, khi thì 7, khi thì 11. Đây là ví dụ ứng dụng hóc búa nhất của sự khác biệt giữa số ký tự và số byte.

Chia sẻ bài viết này