Tại sao tên file bị lỗi giữa Mac và Windows?
Bạn đã bao giờ gửi file từ Mac sang PC Windows và thấy tên file bị loạn, dấu thanh tách rời hoặc ký tự lạ? Đó là vấn đề Unicode NFD và NFC.
Unicode là gì?
Unicode là tiêu chuẩn quốc tế để mã hóa văn bản. Nó gán một số duy nhất (gọi là điểm mã) cho mỗi ký tự của mỗi ngôn ngữ. Ví dụ, chữ 'A' là U+0041 và chữ 'á' (a có dấu sắc) là U+00E1.
NFC và NFD: Nguyên nhân gốc
Unicode cho phép biểu diễn một số ký tự bằng hai cách khác nhau:
NFC (Dạng kết hợp)
Ký tự được lưu trữ dưới dạng một điểm mã duy nhất. Ví dụ, 'é' (e với dấu sắc) được lưu là U+00E9.
NFD (Dạng phân tách)
Ký tự được tách thành ký tự cơ sở và các dấu kết hợp. Cùng ký tự 'é' đó trở thành U+0065 (e) + U+0301 (dấu sắc kết hợp).
Hai dạng này trông giống nhau trên màn hình nhưng được lưu trữ khác nhau trong bộ nhớ. Sự khác biệt này là nguyên nhân gốc của lỗi tên file.
Tại sao macOS sử dụng NFD?
Apple chọn NFD cho hệ thống file (HFS+ và sau đó là APFS) vì dạng phân tách giúp đơn giản hóa việc so sánh và sắp xếp chuỗi ký tự. Khi macOS lưu file, nó tự động chuyển đổi tên file sang NFD. Windows và Linux thì thường sử dụng NFC. Vì vậy, khi bạn chuyển file từ Mac sang Windows, tên file có thể chứa các ký tự phân tách mà Windows không hiển thị đúng.
🇰🇷 Tiếng Hàn: Trường hợp dễ thấy nhất
Tiếng Hàn là nơi vấn đề này rõ ràng nhất. Trong NFC, âm tiết '한' là một ký tự duy nhất (U+D55C). Trong NFD, nó được tách thành ba jamo: 'ㅎ' + 'ㅏ' + 'ㄴ'. Tên file '한글.txt' sẽ trở thành 'ㅎㅏㄴㄱㅡㄹ.txt' trên Windows — hoàn toàn không đọc được.
ㅎㅏㄴㄱㅡㄹ.txt한글.txt🇫🇷 Tiếng Pháp: Dấu tách rời
Các ký tự có dấu tiếng Pháp như é, è, ê và ç bị ảnh hưởng. Trong NFD, 'résumé.pdf' trở thành 'r + e + dấu sắc kết hợp + sumé + dấu sắc kết hợp.pdf'. Trên một số hệ thống có thể trông tương tự, nhưng gây ra lỗi khi tìm kiếm và sắp xếp file.
résumé.pdfrésumé.pdf🇩🇪 Tiếng Đức: Umlaut bị hỏng
Các umlaut tiếng Đức (ö, ü, ä) bị phân tách trong NFD. 'Über.docx' trở thành 'U + dấu tách kết hợp + ber.docx'. Điều này có thể gây vấn đề khi chia sẻ file với người dùng Windows hoặc Linux.
Über.docxÜber.docx🇻🇳 Tiếng Việt: Dấu phù hợp phức tạp
Tiếng Việt bị ảnh hưởng đặc biệt nhiều vì các ký tự thường mang nhiều dấu. Một ký tự như 'ệ' có thể bị tách thành 'e + dấu mũ kết hợp + dấu chấm dưới kết hợp' — ba điểm mã cho một ký tự nhìn thấy.
Việt Nam.txtViệt Nam.txt🇪🇸 Tiếng Tây Ban Nha: Vấn đề chữ ñ
Chữ ñ tiếng Tây Ban Nha bị tách từ U+00D1 thành 'N' + dấu ngã kết hợp (U+0303). Các nguyên âm có dấu như á, é, í, ó, ú cũng bị ảnh hưởng.
España.txtEspaña.txtKhi nào vấn đề này xảy ra?
- Gửi file đính kèm email từ Mac sang Windows
- Chia sẻ file qua USB
- Tải lên bộ nhớ đám mây (Google Drive, Dropbox, OneDrive)
- Chuyển file qua mạng (NAS, chia sẻ SMB)
- Giải nén file ZIP tạo trên Mac
- Sử dụng hệ thống quản lý phiên bản (Git)
FilenameFixer giải quyết vấn đề này như thế nào
FilenameFixer chuyển đổi tên file từ NFD sang NFC bằng phương thức String.prototype.normalize() của JavaScript. Việc chuyển đổi diễn ra hoàn toàn trong trình duyệt — không có file nào được gửi lên server. Nội dung file của bạn không bị thay đổi; chỉ tên file được sửa.
Tại sao xử lý trong trình duyệt?
Xử lý file trong trình duyệt có nghĩa là dữ liệu của bạn không bao giờ rời khỏi thiết bị. Không cần tin tưởng server nào, không cần lo về chính sách bảo mật, và không có nguy cơ lộ dữ liệu. Công cụ cũng hoạt động ngoại tuyến và cực kỳ nhanh.