Tra cứu ký tự Unicode và emoji

Điểm mã, tên, UTF-8/UTF-16, grapheme, chuẩn hóa và bộ chọn emoji.

Dán bất cứ thứ gì: mỗi ký tự mà người đọc thấy được tách thành các điểm mã.

Ký tự nhìn thấy
20
Điểm mã
26
Đơn vị UTF-16 (length của JS)
30
Byte UTF-8
53

Cụm grapheme

  1. T
    • U+0054 Tên không có trong bảng kèm theo
      Chữ hoa (Lu) · Basic Latin · UTF-8 54

    T · \u0054

  2. i
    • U+0069 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Basic Latin · UTF-8 69

    i · \u0069

  3. ế
    • U+1EBF Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Latin Extended Additional · UTF-8 E1 BA BF

    ế · \u1EBF

  4. n
    • U+006E Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Basic Latin · UTF-8 6E

    n · \u006E

  5. g
    • U+0067 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Basic Latin · UTF-8 67

    g · \u0067

  6. ␠
    • U+0020 Tên không có trong bảng kèm theo
      Khoảng trắng (Zs) · Basic Latin · UTF-8 20

      · \u0020

  7. V
    • U+0056 Tên không có trong bảng kèm theo
      Chữ hoa (Lu) · Basic Latin · UTF-8 56

    V · \u0056

  8. i
    • U+0069 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Basic Latin · UTF-8 69

    i · \u0069

  9. ệ
    • U+1EC7 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Latin Extended Additional · UTF-8 E1 BB 87

    ệ · \u1EC7

  10. t
    • U+0074 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Basic Latin · UTF-8 74

    t · \u0074

  11. ␠
    • U+0020 Tên không có trong bảng kèm theo
      Khoảng trắng (Zs) · Basic Latin · UTF-8 20

      · \u0020

  12. 🤦🏽‍♂️
    • U+1F926 Tên không có trong bảng kèm theo
      Ký hiệu khác (So) · Supplemental Symbols and Pictographs · UTF-8 F0 9F A4 A6 · UTF-16 D83E DD26
    • U+1F3FD Tên không có trong bảng kèm theo
      Ký hiệu bổ trợ (Sk) · Miscellaneous Symbols and Pictographs · UTF-8 F0 9F 8F BD · UTF-16 D83C DFFD
    • U+200D Tên không có trong bảng kèm theo
      Ký tự định dạng (Cf) · General Punctuation · UTF-8 E2 80 8D
    • U+2642 Tên không có trong bảng kèm theo
      Ký hiệu khác (So) · Miscellaneous Symbols · UTF-8 E2 99 82
    • U+FE0F Tên không có trong bảng kèm theo
      Dấu không chiếm chỗ (Mn) · Variation Selectors · UTF-8 EF B8 8F

    🤦🏽‍♂️ · \u{1F926}\u{1F3FD}\u200D\u2642\uFE0F

  13. ␠
    • U+0020 Tên không có trong bảng kèm theo
      Khoảng trắng (Zs) · Basic Latin · UTF-8 20

      · \u0020

  14. 🇻🇳
    • U+1F1FB Tên không có trong bảng kèm theo
      Ký hiệu khác (So) · Enclosed Alphanumeric Supplement · UTF-8 F0 9F 87 BB · UTF-16 D83C DDFB
    • U+1F1F3 Tên không có trong bảng kèm theo
      Ký hiệu khác (So) · Enclosed Alphanumeric Supplement · UTF-8 F0 9F 87 B3 · UTF-16 D83C DDF3

    🇻🇳 · \u{1F1FB}\u{1F1F3}

  15. ␠
    • U+0020 Tên không có trong bảng kèm theo
      Khoảng trắng (Zs) · Basic Latin · UTF-8 20

      · \u0020

  16. é
    • U+0065 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Basic Latin · UTF-8 65
    • U+0301 Tên không có trong bảng kèm theo
      Dấu không chiếm chỗ (Mn) · Combining Diacritical Marks · UTF-8 CC 81

    é · \u0065\u0301

  17. ␠
    • U+0020 Tên không có trong bảng kèm theo
      Khoảng trắng (Zs) · Basic Latin · UTF-8 20

      · \u0020

  18. fi
    • U+FB01 Tên không có trong bảng kèm theo
      Chữ thường (Ll) · Alphabetic Presentation Forms · UTF-8 EF AC 81

    fi · \uFB01

  19. ␠
    • U+0020 Tên không có trong bảng kèm theo
      Khoảng trắng (Zs) · Basic Latin · UTF-8 20

      · \u0020

  20. ₫
    • U+20AB Tên không có trong bảng kèm theo
      Ký hiệu tiền tệ (Sc) · Currency Symbols · UTF-8 E2 82 AB

    ₫ · \u20AB

Các dạng chuẩn hóa

NFC · 25 điểm mã

Tiếng Việt 🤦🏽‍♂️ 🇻🇳 é fi ₫

NFD · 30 điểm mã

Tiếng Việt 🤦🏽‍♂️ 🇻🇳 é fi ₫

NFKC · 26 điểm mã

Tiếng Việt 🤦🏽‍♂️ 🇻🇳 é fi ₫

NFKD · 31 điểm mã

Tiếng Việt 🤦🏽‍♂️ 🇻🇳 é fi ₫

Công cụ này làm gì

Ba thẻ. Phân tích văn bản tách thứ bạn dán vào thành các ký tự người đọc thấy (cụm grapheme, dùng Intl.Segmenter của trình duyệt), rồi tách mỗi cụm thành các điểm mã kèm tên, loại, khối, byte UTF-8, đơn vị UTF-16 và chuỗi thoát HTML, JavaScript; đồng thời đếm văn bản theo bốn cách và hiển thị bốn dạng chuẩn hóa. Tìm ký tự tìm theo tên tiếng Anh, theo điểm mã (U+20AB, 1F600) hoặc theo chính ký tự. Emoji là bộ chọn với chín nhóm, chọn màu da và lọc theo tên; bấm vào emoji để sao chép và thêm vào ô "Đã chọn".

Bốn cách đếm "một ký tự"

Emoji ôm mặt màu da trung bình 🤦🏽‍♂️ trông như một ký tự nhưng gồm năm điểm mã: U+1F926, U+1F3FD (bộ điều chỉnh màu da), U+200D (ký tự nối rộng 0), U+2642 (ký hiệu nam) và U+FE0F (bộ chọn biến thể). Hai điểm mã nằm ngoài mặt phẳng cơ bản nên mỗi cái cần hai đơn vị UTF-16, vì thế "🤦🏽‍♂️".length trong JavaScript bằng 7. Lưu dạng UTF-8 thì tốn 17 byte. Cả bốn con số đều đúng, chỉ trả lời các câu hỏi khác nhau: cụm grapheme là thứ người đọc đếm (dùng cho giới hạn độ dài và khi cắt chuỗi), điểm mã là thứ Unicode đặt tên, đơn vị UTF-16 là thứ length đếm, byte UTF-8 là thứ cơ sở dữ liệu lưu.

Tiếng Việt cũng vậy: "ệ" có thể là một điểm mã (U+1EC7) hoặc ba (e, U+0323 dấu chấm dưới, U+0302 dấu mũ), trông giống hệt nhau.

Chuẩn hóa NFC, NFD, NFKC, NFKD

NFC ghép lại (một điểm mã cho "ệ") và là dạng web, cơ sở dữ liệu thường dùng. NFD tách thành chữ gốc cộng dấu. NFKC, NFKD còn thay ký tự "tương thích" bằng ký tự thường: chữ ghép fi thành "fi", ² thành "2". Hãy chuẩn hóa về cùng một dạng trước khi so sánh chuỗi.

Emoji và dữ liệu đi kèm

Danh sách emoji là toàn bộ emoji đầy đủ của Emoji 16.0 (tháng 9/2024) với tên ngắn theo CLDR. Emoji mới hơn (Emoji 17.0 từ tháng 9/2025 trở đi) chưa có trong bộ chọn vì nhiều thiết bị chưa hiển thị được, nhưng vẫn được phân tích đúng khi bạn dán vào. Tên ký tự lấy từ Unicode Character Database 18.0 cho khoảng 4.900 ký tự thông dụng (Latin kể cả toàn bộ tiếng Việt, Hy Lạp, Kirin, dấu câu, tiền tệ, mũi tên, toán học, ký hiệu, kana, các khối emoji chính); chữ Hán và âm tiết Hangul được tính tên theo quy tắc của chuẩn. Đọc thêm điểm mã, grapheme và byte, hoặc dùng công cụ mã hóa HTML entity.

Câu hỏi thường gặp

Vì sao "🤦🏽‍♂️".length bằng 7?

length đếm đơn vị UTF-16. Emoji gồm năm điểm mã; mặt người và bộ điều chỉnh màu da cần hai đơn vị mỗi cái, ba điểm mã còn lại cần một: 2 + 2 + 1 + 1 + 1 = 7.

Đếm ký tự như người đọc thế nào?

Đếm cụm grapheme, ví dụ bằng Intl.Segmenter trong JavaScript. Đếm điểm mã bằng [...text].length gần đúng hơn length nhưng vẫn tách rời chuỗi emoji và chữ có dấu tổ hợp.

Nên dùng dạng chuẩn hóa nào?

Lưu và so sánh văn bản ở NFC. Dùng NFKC cho định danh, khóa tìm kiếm và tên người dùng. Dùng NFD khi muốn bỏ dấu bằng cách xóa các dấu tổ hợp.

Vì sao emoji mới hiện thành ô vuông?

Phông emoji của thiết bị chưa có nó. Mỗi phiên bản Unicode thêm emoji, còn hệ điều hành cập nhật phông sau. Vì thế bộ chọn dùng Emoji 16.0.