CodeKitHub
Công cụ Văn bản

Bộ đếm Byte — Số ký tự so với Kích thước Byte

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

Gõ hoặc dán văn bản và xem trực tiếp số ký tự nó chứa so với số byte thực tế nó chiếm dụng trong UTF-8 và UTF-16 — hai con số này bắt đầu khác nhau ngay khi có ký tự ngoài ASCII (dấu, chữ CJK, emoji).

0
Characters
0
UTF-8 bytes
0
UTF-16 bytes

Công Cụ Này Là Gì?

Với văn bản ASCII thuần (chữ cái tiếng Anh, chữ số, dấu câu cơ bản), số ký tự và số byte là cùng một con số — mỗi ký tự chiếm đúng một byte trong UTF-8. Khi văn bản chứa chữ cái có dấu, chữ Trung/Nhật/Hàn, chữ Kirin, chữ Ả Rập, emoji, hoặc hầu hết các ký tự ngoài ASCII khác, điều đó không còn đúng nữa: một ký tự có thể chiếm 2, 3 hoặc 4 byte trong UTF-8, và 2 hoặc 4 byte trong UTF-16.

Điều này quan trọng bất cứ khi nào một hệ thống có giới hạn theo byte thay vì theo ký tự — tin nhắn SMS, kích thước cột cơ sở dữ liệu, giới hạn payload API và một số nền tảng mạng xã hội đều đo bằng byte, không phải ký tự, vì vậy cùng một đoạn văn bản có thể âm thầm vượt quá giới hạn tùy thuộc vào ngôn ngữ hoặc ký hiệu mà nó chứa.

Tại Sao Nên Dùng?

  • Ô tiểu sử kiểu Twitter/X giới hạn theo byte chứ không phải ký tự, và tên bạn có emoji — gõ vào đây để xem chi phí byte thực trước khi biểu mẫu âm thầm cắt bớt nó.
  • Cột cơ sở dữ liệu của ứng dụng được định nghĩa là VARCHAR(255) theo byte bên dưới, và một tiêu đề sản phẩm tiếng Nhật hay Ả Rập "trông ngắn" cứ bị từ chối liên tục — dán vào đây để xem tại sao nó thực sự chiếm gấp 3 lần số byte so với tiêu đề chữ Latinh.
  • Bạn đang ước tính một tin nhắn marketing đa ngôn ngữ sẽ chiếm bao nhiêu đoạn SMS — vì nhà mạng tính cước và chia đoạn theo kích thước byte, kiểm tra số byte UTF-8/UTF-16 ở đây tốt hơn là đoán mò rồi nhận hóa đơn quá cỡ.
  • Một API trả về lỗi "payload too large" bí ẩn ở một trường JSON có bộ kiểm tra độ dài byte nghiêm ngặt, trong khi chuỗi đó trông bình thường trong trình soạn thảo — công cụ này cho bạn thấy chính xác chuỗi đó thực sự tốn bao nhiêu byte.
  • Bạn đang so sánh tại sao cùng một câu lại tốn nhiều dung lượng lưu trữ hơn ở ngôn ngữ này so với ngôn ngữ kia — gõ từng phiên bản vào và xem số byte UTF-8 tăng vọt với văn bản CJK hay tiếng Ả Rập so với phiên bản ASCII thuần.
  • Bạn cần kiểm tra lại xem một emoji trong tên người dùng có bị một quy tắc kiểm tra khó tính đếm là một hay hai ký tự — công cụ này đếm đúng như cách một người nhìn thấy, nên bạn có thể biết hệ thống kia có đang đếm sai không.

Cách Sử Dụng

  1. Gõ hoặc dán văn bản vào ô nhập.
  2. Đọc số ký tự, số byte UTF-8 và số byte UTF-16 bên dưới — chúng cập nhật khi bạn gõ.

Ví dụ

Đầu vào

Hello, 世界! 🌍

Đầu ra

12 ký tự, 19 byte UTF-8, 26 byte UTF-16

Phần ASCII ("Hello, " và "! ") chiếm 1 byte cho mỗi ký tự trong UTF-8. Mỗi chữ Trung Quốc chiếm 3 byte, và emoji chiếm 4 byte — đó là lý do số byte cao hơn đáng kể so với số ký tự.

Ứng dụng phổ biến

  • Kiểm tra xem mô tả sản phẩm đa ngôn ngữ có vừa với cột cơ sở dữ liệu được định nghĩa theo độ dài byte thay vì số ký tự hay không.
  • Ước tính số đoạn SMS sử dụng, vì SMS được tính cước và chia theo kích thước byte, còn văn bản không phải chữ Latinh dùng giới hạn khác cho mỗi đoạn.
  • Xác minh payload API hoặc trường biểu mẫu vẫn nằm dưới giới hạn kích thước theo byte trước khi gửi.
  • Hiểu tại sao một chuỗi "trông có vẻ ngắn" lại bị một hệ thống có kiểm tra độ dài theo byte từ chối.

Kích thước byte UTF-8 theo loại ký tự

Bảng dưới đây cho thấy chi phí byte UTF-8 điển hình theo từng loại ký tự — hữu ích để ước tính một đoạn văn bản đa ngôn ngữ thực sự nặng bao nhiêu trước khi bạn dán toàn bộ vào.

Loại ký tựVí dụByte UTF-8Byte UTF-16
Chữ cái/số ASCIIA, 712
Latinh có dấu (é, ñ, ü)é22
Kirin / Hy Lạp / Do Thái / Ả Rậpд, α, א22
CJK (Trung, Nhật, Hàn)32
Hầu hết emoji (ngoài BMP)🌍44

Câu Hỏi Thường Gặp

Tại sao số ký tự và số byte không khớp nhau?

Văn bản Unicode được lưu trữ dưới dạng byte, và mỗi ký tự cần bao nhiêu byte phụ thuộc vào bảng mã và chính ký tự đó. Trong UTF-8, ký tự ASCII chiếm 1 byte, hầu hết chữ Latinh có dấu và chữ Kirin/Hy Lạp/Do Thái/Ả Rập chiếm 2 byte, hầu hết ký tự CJK chiếm 3 byte, và emoji thường chiếm 4 byte. Số ký tự chỉ đơn giản đếm các ký hiệu, bỏ qua cách chúng được lưu trữ.

Tôi nên dùng số byte nào cho trường có giới hạn theo byte?

Hãy dùng bảng mã mà hệ thống thực sự sử dụng để lưu trữ hoặc truyền văn bản — hầu hết các API web, cơ sở dữ liệu và tệp hiện đại đều dùng UTF-8, nên số byte UTF-8 thường là số liên quan. Một số hệ thống cũ hơn (như xử lý chuỗi nội bộ của Windows/Java) dùng UTF-16.

Công cụ này có đếm emoji chính xác không?

Có. Nhiều emoji được lưu trữ nội bộ dưới dạng một cặp đơn vị mã "surrogate" UTF-16, mà các phương pháp đếm đơn giản sẽ đếm thành 2 ký tự. Công cụ này đếm chính xác các code point Unicode, nên một emoji được tính là 1 ký tự, khớp với số ký tự mà người dùng thực sự nhìn thấy.

Công cụ này có giống công cụ Đếm từ không?

Không — Đếm từ tập trung vào số từ và số câu phục vụ việc viết. Công cụ này tập trung cụ thể vào kích thước byte so với số ký tự, điều quan trọng đối với giới hạn kỹ thuật hơn là yêu cầu về số từ.

Văn bản của tôi có được tải lên đâu không?

Không. Việc đếm diễn ra hoàn toàn cục bộ trong trình duyệt của bạn bằng bộ mã hóa văn bản tích hợp sẵn của JavaScript; không có gì được gửi đến máy chủ.

Tại sao cùng một ký tự lại chiếm số byte khác nhau giữa UTF-8 và UTF-16?

Hai bảng mã dùng quy tắc hoàn toàn khác nhau để ánh xạ code point sang byte. UTF-8 dùng 1 đến 4 byte tùy ký tự, được tối ưu để ASCII vẫn giữ 1 byte. UTF-16 dùng 2 byte cho hầu hết ký tự và chỉ dùng 4 byte cho ký tự nằm ngoài Basic Multilingual Plane (như hầu hết emoji) — nên một chữ Trung Quốc là 3 byte trong UTF-8 nhưng chỉ 2 byte trong UTF-16, còn emoji là 4 byte ở cả hai.

Emoji tông màu da hoặc emoji gia đình (ghép từ nhiều ký tự) có được đếm đúng không?

Công cụ đếm theo code point Unicode, nên một emoji ghép được tạo từ nhiều code point nối bằng zero-width joiner (như emoji gia đình) được đếm là nhiều ký tự, không phải một — đúng với cách văn bản đó thực sự được mã hóa, dù nó hiển thị như một hình duy nhất.

Sự khác biệt giữa số byte UTF-8 và số ký tự đối với văn bản tiếng Anh thuần là gì?

Với văn bản tiếng Anh chuẩn chỉ dùng chữ cái ASCII, chữ số, khoảng trắng và dấu câu cơ bản, chúng giống hệt nhau — mỗi ký tự đúng 1 byte trong UTF-8. Khoảng cách chỉ xuất hiện khi thêm chữ có dấu, ký hiệu, hoặc chữ viết không phải Latinh.

Tôi có thể dùng công cụ này để kiểm tra chính xác giới hạn ký tự Twitter/X hay SMS không?

Công cụ này cho bạn số ký tự và byte thô, vốn là nền tảng của những giới hạn đó, nhưng các nền tảng đôi khi áp dụng quy tắc trọng số riêng (ví dụ một số nơi tính một số emoji hay URL nhất định là một số ký tự cố định bất kể độ dài thực tế) — hãy kiểm tra quy tắc cụ thể của nền tảng cho các trường hợp đặc biệt, và dùng công cụ này để hiểu chi phí byte nền tảng.

Công Cụ Liên Quan