Tại sao dấu tiếng Việt khiến tin nhắn SMS bị cắt ngắn còn 70 ký tự?
Trong hạ tầng mạng viễn thông toàn cầu (GSM), dung lượng chuẩn của một tin nhắn văn bản SMS là 140 byte (tương đương 1.120 bit). Cách mạng viễn thông xử lý dung lượng này phụ thuộc vào bảng mã ký tự được sử dụng:
- Bảng mã GSM 03.38 (GSM-7): Mỗi ký tự được mã hóa bằng 7 bit. Do đó, 1.120 bit chứa được chính xác
1.120 / 7 = 160 ký tự. Một số ký tự mở rộng (như^ { } \ [ ~ ] | €) cần thêm tiền tố 0x1B nên tính là 2 đơn vị ký tự. - Bảng mã Unicode UCS-2: Khi văn bản xuất hiện dù chỉ một ký tự không thuộc GSM-7 (như
ơ, ư, đ, á, ả, ê...), hệ thống buộc phải chuyển toàn bộ tin nhắn sang chuẩn UCS-2. Chuẩn này dùng 16 bit (2 byte) cho mỗi ký tự. Kết quả là140 byte / 2 byte = 70 ký tự.
Điều này giải thích vì sao một chiến dịch SMS Brandname hoặc thông báo đơn hàng chỉ dài 75 ký tự có dấu tiếng Việt lại bị nhà mạng tính cước 2 tin nhắn, làm tăng gấp đôi chi phí viễn thông của doanh nghiệp.
Quy tắc ghép tin nhắn dài (Multipart SMS 153 và 67 ký tự)
Khi nội dung vượt quá độ dài của 1 tin nhắn đơn, điện thoại vẫn hiển thị liền mạch nhờ công nghệ ghép tin (Concatenated SMS). Nhà mạng sẽ trích ra 6 đến 7 byte trong mỗi tin để chứa tiêu đề liên kết UDH (User Data Header):
- Với tin nhắn GSM-7: Dung lượng mỗi phần tin nhắn ghép bị giảm từ 160 xuống còn 153 ký tự.
- Với tin nhắn UCS-2 (có dấu): Dung lượng mỗi phần tin nhắn ghép bị giảm từ 70 xuống còn 67 ký tự.
Cách tính số từ và chuẩn hóa văn bản tiếng Việt
Nhiều công cụ đếm ký tự đơn giản thường cho kết quả sai lệch khi xử lý tiếng Việt vì không xử lý dạng chuẩn hóa Unicode:
- Khắc phục lỗi NFD từ Word và macOS: Khi gõ tiếng Việt trên Word hoặc bộ gõ macOS, văn bản thường ở dạng tổ hợp NFD (ký tự gốc tách rời dấu thanh). Ví dụ, chữ "ế" có thể bị phân rã thành 3 ký tự (e + nón + sắc). benri chuẩn hóa văn bản về dạng NFC trước khi đếm, nên "ế" luôn được tính là 1 ký tự như khi bạn nhìn thấy.
- Quy tắc đếm từ chuẩn xác: Một từ hợp lệ được phân tách bởi khoảng trắng và bắt buộc phải chứa ít nhất một chữ cái hoặc chữ số. Các ký hiệu dấu câu đứng lẻ loi (như
--,...,//) không bị đếm nhầm thành từ. - Nhận diện câu thông minh: Nhận diện ngắt câu dựa vào các dấu kết thúc câu (
.,!,?,…) kèm khoảng trắng, không bị nhầm lẫn khi người dùng viết tên miền (nhưbenri.vn) hoặc số thập phân (như3.14).
Câu hỏi thường gặp
Tại sao từ "Café" gửi tin nhắn vẫn được 160 ký tự mà "Cà phê" chỉ được 70?
Vì bảng ký tự cơ bản của SMS (GSM-7) có sẵn vài chữ có dấu của châu Âu như é, è, à, ù, ì, ò nhưng không có các chữ riêng của tiếng Việt như ê, ơ, ư, ạ, ả. "Café" chỉ dùng ký tự trong GSM-7 nên mỗi tin chứa được 160 ký tự; "Cà phê" có chữ "ê" nên tin chuyển sang bảng mã Unicode (UCS-2) và mỗi tin chỉ còn 70 ký tự.
Gửi tin nhắn SMS Brandname tiếng Việt nên dùng có dấu hay không dấu?
Với mã OTP, thông báo số dư hay tin quảng cáo gửi số lượng lớn, gửi không dấu giúp mỗi tin chứa 160 thay vì 70 ký tự, nên số tin phải trả tiền giảm khoảng một nửa. Với tin chăm sóc khách hàng cần trang trọng, giữ có dấu và cố viết dưới 70 ký tự để không bị tách thành 2 tin.
Biểu tượng cảm xúc (Emoji) được tính dung lượng SMS như thế nào?
Chỉ cần một emoji, cả tin nhắn chuyển sang bảng mã Unicode và giới hạn còn 70 ký tự. Phần lớn emoji còn tính là 2 ký tự trong giới hạn đó.
Tính năng "Chuyển sang không dấu" xử lý những ký tự nào?
Công cụ thay chữ có dấu bằng chữ không dấu tương ứng (ă, â thành a; ê thành e; ô, ơ thành o; ư thành u; đ thành d; Đ thành D) và bỏ các dấu thanh. Nếu sau đó tin nhắn không còn emoji hay ký tự ngoài bảng GSM-7, giới hạn trở lại 160 ký tự; bộ đếm phía trên cho biết ngay.