Ký tự vô hình và zero-width space trong văn bản
Tìm nguyên nhân khiến hai chuỗi trông giống nhau nhưng không khớp hoặc không lọc trùng được.
Trả lời nhanh: Ký tự vô hình là code point không tạo dấu hiệu rõ trên màn hình, như zero-width space U+200B hoặc non-breaking space U+00A0. Chúng có thể làm sai độ dài, tìm kiếm, đăng nhập và lọc trùng dù văn bản nhìn bình thường.
Các ký tự thường gặp
U+200B là zero-width space; U+200D là zero-width joiner dùng để ghép một số emoji; U+00A0 là khoảng trắng không ngắt; U+FEFF có thể là dấu BOM hoặc zero-width no-break space. Không nên xóa tất cả một cách mù quáng vì joiner có thể cần thiết để emoji hiển thị đúng.
Dấu hiệu có ký tự vô hình
Chuỗi có độ dài lớn hơn số ký tự nhìn thấy, tìm kiếm không khớp, dòng trùng không bị loại hoặc con trỏ di chuyển qua một vị trí “trống”. Dữ liệu sao chép từ PDF, website và ứng dụng chat là nguồn phổ biến.
Trước
unitext[U+200B]kit
Sau
unitextkit
Cách xử lý an toàn
Kiểm tra code point trước khi xóa. Khoảng trắng không ngắt trong văn bản thông thường có thể đổi thành dấu cách; zero-width space có thể bỏ nếu không phục vụ ngắt từ; zero-width joiner nên giữ trong emoji và chữ viết cần nó. Luôn kiểm tra lại kết quả hiển thị.
Câu hỏi thường gặp
NFC có xóa zero-width space không?
Không. Chuẩn hóa Unicode không phải thao tác xóa ký tự vô hình.
Có thể xóa toàn bộ ký tự U+200D không?
Không nên. U+200D tham gia tạo emoji gia đình, nghề nghiệp và một số hệ chữ; xóa nó có thể đổi cách hiển thị.