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ự
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
| Emoji | Nhìn thấy | Số ký tự Unicode | Độ dài UTF-16 | Số byte UTF-8 |
|---|---|---|---|---|
| Mặt cười | 1 hình | 1 ký tự | 2 | 4 byte |
| Ngón cái (like) | 1 hình | 1 ký tự | 2 | 4 byte |
| Ngón cái đổi màu da | 1 hình | 2 ký tự | 4 | 8 byte |
| Gia đình | 1 hình | 7 ký tự | 11 | 25 byte |
| Cờ cầu vồng | 1 hình | 4 ký tự | 6 | 14 byte |
| Cờ Nhật Bản | 1 hình | 2 ký tự | 4 | 8 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ích | Ví dụ |
|---|---|---|
| Emoji cơ bản | 1 code point = 1 ký tự | Mặt cười (U+1F600) |
| Biến thể màu da | Emoji 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 ZWJ | Nhiều emoji nối với nhau bằng ký tự vô hình | Gia đình = nam + ZWJ + nữ + ZWJ + bé gái + ZWJ + bé trai |
| Cờ quốc gia | Ghé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 |
| SMS | Thêm 1 emoji là cả tin chuyển sang giới hạn 70 ký tự | Tương tự | Đổi bảng mã (encoding) |
Giới hạn của một bài đăng trên X là 280 đơn vị trọng số, và mỗi emoji ngốn trọng số 2. Chữ cái Latin hay chữ số chỉ nặng 1, nên 1 emoji chiếm đúng chỗ của 2 ký tự loại đó. Với những loại chữ được quy định trọng số 2 như tiếng Nhật hay tiếng Trung, 1 emoji chiếm đúng chỗ của 1 ký tự (viết toàn bằng tiếng Nhật thì trần thực tế là 140 ký tự). Cách tính theo trọng số này không nhìn vào số code point bên trong, nên emoji ghép như emoji gia đình gồm 7 ký tự Unicode cũng chỉ tốn đúng 2. 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ự.
Cũng có những dịch vụ không công bố cách đếm, chẳng hạn Instagram hay LINE. Khi không có thông tin chính thức, cách chắc chắn nhất là gõ thử 1 emoji vào khung nhập rồi xem phần hiển thị số ký tự còn lại tụt đi bao nhiêu. Emoji trông như 1 hình nhưng bên trong là nhiều ký tự thì sẽ ngốn nhiều chỗ hơn bạn tưởng.
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ện | Số ký tự mỗi tin | Bảng mã |
|---|---|---|
| Chỉ có chữ cái Latin và số | 160 ký tự | GSM-7 (7 bit) |
| Chỉ có tiếng Nhật | 70 ký tự | UCS-2 (16 bit) |
| Có emoji | 70 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.
Con số 70 này thực chất là số đơn vị 16 bit mà một tin nhắn chở được. Phần lớn emoji không nhét vừa 16 bit nên mỗi hình tốn 2 đơn vị, vì vậy một tin chỉ gồm emoji thì đựng được khoảng 35 hình. Emoji có màu da hay ghép bằng ZWJ còn tốn thêm nữa: emoji gia đình cần tới 11 đơn vị, tự nó đã chiếm chỗ của 11 ký tự tiếng Nhật.
Số lượng emoji tăng không ngừng
| Năm | Phiên bản Unicode | Tổng số emoji | Emoji mới đáng chú ý |
|---|---|---|---|
| 2010 | 6.0 | Khoảng 720 | Mặt, động vật, đồ ăn cơ bản |
| 2015 | 8.0 | Khoảng 1.630 | Biến thể màu da |
| 2020 | 13.0 | Khoảng 3.300 | Ninja, trà sữa trân châu |
| 2024 | 16.0 | 3.790 | Vân tay, đàn hạc, vệt bắn |
| 2025 | 17.0 | 3.953 | Cá voi sát thủ, kèn trombone, hòm châu báu |
Các con số này được lấy theo đúng cách đếm của tệp dữ liệu emoji do Unicode phát hành: các chuỗi ở dạng chứa đủ mọi chỉ định cần cho việc hiển thị (dạng đầy đủ), cộng thêm 5 thành phần màu da và 4 thành phần kiểu tóc. Đếm theo cách khác thì tổng số cũng khác, nên khi thấy con số ở một tài liệu khác lệch hẳn, hãy kiểm tra tiêu chuẩn đếm trước đã.
Tính đến tháng 8 năm 2026, bản mới nhất là 17.0 với 3.953 emoji, tăng 163 so với bản 16.0 ngay trước đó. Bộ emoji được biết đến rộng rãi như emoji dành cho điện thoại là bộ 176 hình của NTT DoCoMo (i-mode) năm 1999, nhưng trước đó J-Phone đã có bản triển khai khoảng 90 hình vào năm 1997. Lấy mốc 176 hình của i-mode, con số đã nhân lên hơn 20 lần trong 26 năm.
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 đình | Lý do |
|---|---|---|
| JavaScript | 11 | Đếm theo code unit UTF-16 |
| Python | 7 | Đếm theo code point Unicode |
| Swift | 1 | Đế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.