Đếm emoji trả về 6 con số cho đoạn bạn dán: tổng emoji, số emoji khác nhau, số code point, số byte UTF-8 mà emoji chiếm, tổng ký tự và tỉ lệ ký tự là emoji. Chuỗi “Vui quá” kèm hai mặt cười và một emoji gia đình có 3 emoji nhưng tới 7 code point, vì emoji gia đình ghép từ nhiều mã. Mọi phép đếm chạy trên trình duyệt, không lưu dữ liệu.
Cách đếm emoji khi một hình gồm nhiều mã
Công cụ đếm theo hình người đọc nhìn thấy (grapheme), nên một emoji ghép từ 5 mã Unicode vẫn là 1 emoji.
- Chuẩn hoá văn bản về NFC rồi tách thành grapheme bằng Intl.Segmenter của trình duyệt.
- Một grapheme được coi là emoji khi có ký tự mặc định hiện dạng emoji, khi ký tự hình đi kèm bộ chọn biến thể U+FE0F, khi là chuỗi nối bằng ZWJ U+200D, khi là cặp chữ cái vùng tạo thành cờ, hoặc là keycap (số kèm U+20E3).
- Các emoji giống nhau được gom lại, đếm số lần và gắn nhãn loại: đơn, kèm biến thể, có màu da, chuỗi ZWJ, cờ, keycap.
- Mỗi hình được tính số code point và số byte UTF-8, rồi cộng thành tổng cho cả đoạn.
| Loại trên công cụ | Ví dụ | Code point | Byte UTF-8 |
|---|---|---|---|
| đơn | mặt cười ra nước mắt (U+1F602) | 1 | 4 |
| kèm biến thể | trái tim đỏ (U+2764 + U+FE0F) | 2 | 6 |
| có màu da | ngón cái giơ lên + màu da | 2 | 8 |
| cờ | cờ Việt Nam (U+1F1FB U+1F1F3) | 2 | 8 |
| keycap | số 1 trong ô vuông | 3 | 7 |
| chuỗi ZWJ | gia đình bố, mẹ, con gái | 5 | 18 |
Số trong bảng đo bằng chính công cụ. Cách site chuẩn hoá và tách ký tự trước khi đếm được viết đầy đủ ở trang phương pháp đếm.
Mỗi nền tảng tính một emoji một kiểu
Theo grapheme, 1 emoji là 1 ký tự; nhưng cách đếm của X tính 2, còn trong SMS một emoji kéo cả tin sang bảng mã UCS-2.
Bài đăng X giới hạn 280 ký tự có trọng số. Công cụ đếm ký tự X tính mỗi emoji 2, kể cả chuỗi ZWJ dài. Bluesky đếm theo grapheme với trần 300, nên emoji ở đó nhẹ hơn hẳn. Với tin nhắn SMS, chỉ một emoji là tin chỉ còn 70 ký tự và phần lớn emoji chiếm 2 đơn vị UTF-16.
Instagram, TikTok và Facebook không công bố cách tính emoji. Các trang đếm ký tự của site tính 1 emoji là 1 ký tự cho những nền tảng này, và giới hạn caption ở đó là số đo cộng đồng, có thể khác khi nền tảng đổi cách xử lý.
Ví dụ: caption cho fanpage bán mỹ phẩm
Caption bán serum dài 54 ký tự có 4 emoji thuộc 3 loại, chiếm 15 byte và 7,4 % số ký tự.
| Nội dung | Emoji | Khác nhau | Code point emoji | Byte emoji | Tổng ký tự |
|---|---|---|---|---|---|
| “Vui quá” + 2 mặt cười ra nước mắt + emoji gia đình | 3 | 2 | 7 | 26 | 11 |
| “Serum mới về [lấp lánh] Da căng bóng sau 7 ngày [giọt nước][giọt nước] Inbox ngay [tay chỉ]” | 4 | 3 | 4 | 15 | 54 |
| Hôm nay trời đẹp. Tôi đi học! | 0 | 0 | 0 | 0 | 29 |
Dòng đầu nằm trong bộ kiểm thử của công cụ: hai mặt cười mỗi cái 4 byte, emoji gia đình 18 byte, cộng 26. Ở dòng caption, dấu ngoặc vuông chỉ là cách mô tả emoji trong bảng này; trên công cụ bạn dán emoji thật, giữa hai giọt nước không có dấu cách.
Emoji lấp lánh chỉ tốn 3 byte, ít hơn ba emoji còn lại. Mã của nó là U+2728, thuộc khối Dingbats, nằm dưới U+10000 nên UTF-8 chỉ cần 3 byte. Cũng caption này, cách đếm X ra 60 chứ không phải 54: bốn emoji mỗi cái cộng thêm 1, và hai chữ “ớ”, “ề” nằm trong dải U+1E00–U+1EFF cũng tính 2.
Tôi không coi số emoji là chỉ số cần đạt. Con số chỉ có ích khi caption bị cắt hoặc vượt giới hạn mà bạn chưa hiểu vì sao.
Trường hợp đặc biệt: trái tim, dấu bản quyền và emoji màu da
Trái tim đỏ gõ không kèm U+FE0F thường hiện dạng chữ đen trắng và công cụ không tính là emoji; có U+FE0F thì tính. Dấu © và ™ trơn cũng không phải emoji, chúng thuộc nhóm ký hiệu trong công cụ phân loại ký tự. Mặt cười gõ bằng dấu như 🙂 hay ^_^ cũng vậy.
Cùng một ngón cái nhưng khác màu da là 2 hình khác nhau trong danh sách, mỗi hình 2 code point. Ký tự nối ZWJ nằm bên trong emoji ghép là một phần của hình, nên công cụ phát hiện ký tự ẩn giữ nguyên chúng thay vì xoá. Trên trình duyệt quá cũ, Intl.Segmenter có thể chưa biết emoji mới và tách một hình ghép thành nhiều phần; số đếm khi đó sẽ cao hơn thực tế.
Công cụ liên quan
- Đếm ký tự online cho tổng ký tự có và không dấu cách khi bạn chỉ cần so với một giới hạn.
- Đếm byte UTF-8 dùng khi emoji làm vỡ cột cơ sở dữ liệu hay trường nhập giới hạn theo byte.
- Đếm ký tự Instagram kiểm caption, bio và số hashtag sau khi đã chốt emoji.
- Đếm ký tự SMS cho thấy một emoji làm tin nhắn tách thành mấy tin.
Câu hỏi thường gặp
1 emoji bằng mấy ký tự?
Tuỳ nơi đếm. Theo ký tự nhìn thấy, mỗi emoji là 1 ký tự, kể cả emoji ghép. Cách đếm của X tính mỗi emoji 2. Trong JavaScript, String.length của phần lớn emoji là 2, còn emoji gia đình ra 8. Công cụ hiện đồng thời số emoji, code point và byte để bạn đối chiếu với nơi mình đăng.
Emoji chiếm bao nhiêu byte?
Mỗi code point của emoji thường tốn 4 byte UTF-8; vài emoji có mã dưới U+10000 như lấp lánh chỉ 3 byte. Emoji ghép cộng dồn mọi mã bên trong: trái tim đỏ kèm U+FE0F là 6 byte, cờ Việt Nam 8 byte, emoji gia đình bố mẹ con 18 byte. Cột “Byte UTF-8” trong danh sách hiện số này cho từng emoji.
Vì sao emoji gia đình tính 5 code point?
Emoji gia đình được ghép từ ba hình người (bố, mẹ, con gái) và hai ký tự nối vô hình ZWJ đứng giữa. Máy hỗ trợ sẽ vẽ chúng thành một hình duy nhất, nên công cụ đếm là 1 emoji, nhưng dữ liệu vẫn là 5 code point và 18 byte. Máy cũ không hỗ trợ sẽ hiện ba người đứng cạnh nhau.
Emoji có làm tin nhắn SMS tốn tiền hơn không?
Có. Emoji nằm ngoài bảng GSM-7 nên cả tin chuyển sang UCS-2, sức chứa giảm từ 160 xuống 70 ký tự, và mỗi emoji thường chiếm 2 trong số đó. Một tin chúc mừng không dấu thêm một bó hoa ở cuối có thể thành 2 tin. Muốn tiết kiệm, bỏ emoji trước khi gửi hàng loạt.
Có đếm emoji trong bình luận Facebook bằng link được không?
Không. Công cụ chỉ đếm văn bản bạn dán vào ô, không tự tải nội dung từ đường link Facebook hay bất kỳ trang nào. Hãy sao chép bình luận hoặc caption, dán vào ô phía trên. Việc đếm emoji diễn ra ngay trên máy bạn, nội dung không được gửi đi đâu.
Vì sao trái tim tôi gõ không được đếm là emoji?
Nhiều khả năng đó là ký tự trái tim U+2764 không kèm bộ chọn biến thể U+FE0F. Unicode coi dạng trơn là ký hiệu văn bản, nhiều máy hiện nó màu đen, nên công cụ không đếm. Chọn trái tim từ bàn phím emoji của điện thoại thường có sẵn U+FE0F và sẽ được đếm.
Căn cứ và nguồn
- UTS #51: Unicode Emoji — Unicode Consortium: định nghĩa chuỗi ZWJ, cờ từ cặp chữ cái vùng, keycap, bộ chọn biến thể U+FE0F.
- UAX #29: Unicode Text Segmentation — Unicode Consortium: quy tắc tách grapheme cluster.
- Intl.Segmenter — MDN: API trình duyệt dùng để tách ký tự nhìn thấy.
- Counting characters — X Developer Platform: cách X tính trọng số ký tự, gồm emoji.
Kiểm tra: 16/09/2026. Giới hạn X, Bluesky và SMS lấy từ tham số của site, số liệu nền tảng kiểm tra ngày 11/09/2026.