Unicode tổ hợp và Unicode dựng sẵn khác nhau thế nào?
Cùng một chữ ệ có thể được lưu theo hai cách. Unicode dựng sẵn (NFC) dùng một ký tự duy nhất cho cả chữ và dấu. Unicode tổ hợp (NFD) lưu chữ e rồi thêm dấu mũ và dấu nặng thành hai ký tự dấu riêng đi kèm. Trên màn hình hai cách thường trông giống hệt nhau, nhưng với máy tính đó là hai chuỗi ký tự khác nhau.
Không có chữ nào bị mất, và đây cũng không phải lỗi bảng mã: mọi byte đều là UTF-8 hợp lệ. Chỉ cần gộp chữ và dấu lại là văn bản trở về dạng mà Windows, Excel và hầu hết phần mềm mong đợi.
Văn bản Unicode tổ hợp đến từ đâu?
- Tên file và thư mục tạo trên Mac, sau đó nén lại hoặc chép qua USB, Google Drive sang máy Windows.
- Văn bản sao chép từ file PDF, từ một số trang web hoặc từ phần mềm trên macOS.
- Máy cài Unikey hoặc Vietkey với bảng mã “Unicode tổ hợp“ thay vì “Unicode“ (dựng sẵn): mọi chữ gõ ra đều bị tách dấu.
- Dữ liệu xuất từ phần mềm cũ hoặc ghép từ nhiều nguồn, nên trong cùng một file có chỗ dựng sẵn, có chỗ tổ hợp.
Dấu hiệu nhận biết
- Dấu hiện lệch sang bên cạnh, chồng lên nhau hoặc thành ô vuông trong Excel, Word, phần mềm Windows cũ hay khi in.
- Ctrl + F, bộ lọc hoặc VLOOKUP không tìm thấy giá trị dù chữ trông giống hệt.
- Sắp xếp theo tên sai thứ tự, kiểm tra trùng lặp bỏ sót, truy vấn cơ sở dữ liệu không ra kết quả.
- Hàm đếm ký tự như LEN trả về số lớn hơn số chữ bạn nhìn thấy.
Cách chuyển bằng Mojibuster
- Sao chép văn bản hoặc tên file bị tách dấu và dán vào ô phía trên. Dán nhiều dòng cùng lúc cũng được.
- Mojibuster gộp toàn bộ chữ và dấu thành Unicode dựng sẵn và cho biết đã đổi bao nhiêu chỗ.
- Bấm Sao chép để dán kết quả vào tài liệu hoặc đổi tên file.
- File CSV, TXT hoặc JSON có thể kéo thả trực tiếp vào ô. Kết quả tải về dưới dạng UTF-8; với bảng tính, xem thêm cách mở CSV tiếng Việt trong Excel.
Dùng chức năng chuyển mã của Unikey
Cách quen thuộc trên Windows là Unikey Toolkit (Ctrl + Shift + F6): sao chép văn bản, chọn bảng mã nguồn “Unicode tổ hợp“ và bảng mã đích “Unicode“, bấm “Chuyển mã“ rồi dán lại. Để không gặp lại lỗi này, hãy đặt bảng mã của Unikey là “Unicode“ (dựng sẵn), không phải “Unicode tổ hợp“.
Đổi tên nhiều file cùng lúc
Mojibuster chạy trong trình duyệt nên không đổi tên file trên máy bạn. Nếu có nhiều file, mở PowerShell trong thư mục đó và chạy lệnh dưới đây: tên file và thư mục con bị tách dấu sẽ được đổi sang dựng sẵn. Hãy sao lưu thư mục trước khi chạy. Các lỗi tiếng Việt khác trong PowerShell được giải thích ở PowerShell lỗi font.
Get-ChildItem -Recurse | Where-Object { $_.Name -ne $_.Name.Normalize() } | Rename-Item -NewName { $_.Name.Normalize() }
Trong Python
Trước khi đưa dữ liệu vào cơ sở dữ liệu hay so sánh chuỗi, hãy chuẩn hóa về dựng sẵn bằng unicodedata.normalize('NFC', text). Cách đọc file và xử lý lỗi tiếng Việt trong pandas có ở trang Python và pandas: lỗi font tiếng Việt.
Khác với lỗi font TCVN3, VNI và mojibake
Nếu văn bản hiện Hµ Néi hoặc Haø Noäi thay vì Hà Nội, đó là văn bản gõ bằng font TCVN3 hoặc VNI, không phải Unicode tổ hợp: xem chuyển font TCVN3 và VNI sang Unicode. Còn Việt thay vì Việt là mojibake, khi UTF-8 bị đọc sai bảng mã: xem lỗi font (mojibake) là gì. Mojibuster sửa được cả những lỗi này trong cùng một bước.
Câu hỏi thường gặp
Chuyển sang dựng sẵn có làm đổi nội dung không?
Không. Mojibuster chỉ gộp chữ và dấu đi kèm thành một ký tự, chữ vẫn y như cũ. Chữ đã ở dạng dựng sẵn, chữ không dấu và số được giữ nguyên.
Chữ trông giống hệt nhưng tìm kiếm không ra. Có phải lỗi này không?
Rất có thể. Nhiều phần mềm hiển thị chữ tổ hợp giống chữ dựng sẵn, nhưng khi tìm kiếm, sắp xếp hay so sánh lại coi là chuỗi khác. Dán văn bản vào đây: nếu Mojibuster báo có chỗ được đổi, văn bản đã ở dạng tổ hợp.
Văn bản có được gửi lên máy chủ không?
Không. Văn bản và file chỉ được xử lý trong trình duyệt của bạn và không rời khỏi thiết bị.