Tiếng Việt có một dạng "trông giống nhau nhưng khác nhau" còn tinh vi hơn cả khoảng trắng: một chữ có dấu như "ề" có thể được lưu dưới dạng một ký tự Unicode dựng sẵn (precomposed), hoặc dưới dạng chữ cái cộng với dấu thanh riêng biệt (dấu huyền + dấu mũ, tổ hợp lại). Cả hai cách hiển thị giống hệt nhau trên màn hình nhưng là chuỗi byte khác nhau — cùng một kiểu vấn đề như khoảng trắng thường và khoảng trắng không ngắt.
Vì sao điều này gây ra lỗi kỳ lạ
Với khoảng trắng, ví dụ kinh điển nhất là một phép so sánh chuỗi trả về "không bằng nhau" một cách bất ngờ, dù văn bản trên màn hình trông giống hệt nhau. Nguyên nhân thường là một chuỗi chứa khoảng trắng thông thường, còn chuỗi kia chứa khoảng trắng không ngắt, được sao chép chẳng hạn từ một trang web hay tài liệu Word. Về mặt hình ảnh không có sự khác biệt; đối với máy tính thì có.
Cắt bỏ (trim)
Trim loại bỏ các ký tự khoảng trắng ở đầu và cuối chuỗi, giữ nguyên nội dung ở giữa. Đây là thao tác tiêu chuẩn để làm sạch dữ liệu đầu vào của người dùng — một khoảng trắng thừa vô tình ở đầu trường biểu mẫu không nên ảnh hưởng đến việc so sánh hoặc xác thực một giá trị.
Thu gọn khoảng trắng
Một thao tác phổ biến khác là thay thế nhiều ký tự khoảng trắng liên tiếp bằng một ký tự duy nhất. Điều này hữu ích cho văn bản được sao chép từ một nguồn có định dạng (như tệp PDF hoặc bảng), nơi có thể xuất hiện khoảng trắng đôi hoặc tab vô tình thay vì một khoảng trắng duy nhất.
Vì sao cần đến điều này
- Chẩn đoán vì sao phép so sánh giữa hai chuỗi trông giống hệt nhau lại thất bại.
- Làm sạch văn bản được sao chép từ nguồn khác khỏi các ký tự thừa và vô hình.
- Chuẩn hóa dữ liệu đầu vào của người dùng trước khi lưu vào cơ sở dữ liệu.
Ký tự độ rộng bằng không
Ngoài các ký tự khoảng trắng nhìn thấy được, còn tồn tại các ký tự độ rộng bằng không (zero-width space, zero-width joiner) — chúng hoàn toàn không chiếm chỗ trên màn hình, nhưng vẫn hiện diện trong văn bản như những ký tự riêng biệt. Những ký tự như vậy đôi khi lọt vào văn bản khi sao chép từ một số trang web hay ứng dụng nhắn tin, và có thể âm thầm phá vỡ việc so sánh chuỗi hay tìm kiếm, trong khi vẫn hoàn toàn vô hình ngay cả trong một trình soạn thảo văn bản.