← Tất cả bài viết

Tên file tiếng Việt bị lỗi khi chuyển từ Mac sang Windows

Nếu tên file tiếng Việt như "Hóa đơn tháng 3.pdf" trên máy Mac trông bình thường, nhưng khi sang Windows thì dấu bị tách ra khỏi chữ, hoặc ô tìm kiếm không thấy file mà bạn nhìn rõ trong thư mục, thì file đó không bị hỏng. Tên file được lưu bằng một cách viết Unicode khác (gọi là NFD), trong khi Windows thường mong đợi dạng NFC. Cách sửa là viết lại tên theo dạng dựng sẵn. Bạn có thể gõ lại tên trên Windows, chạy một lệnh PowerShell ngắn, hoặc kéo file vào công cụ chạy trên trình duyệt như FilenameFixer để đổi tên hàng loạt.

Bài này giải thích nguyên nhân bằng ngôn ngữ đơn giản, không đòi hỏi bạn biết lập trình, sau đó đi qua các cách sửa theo thứ tự từ dễ đến khó.

Tên file tiếng Việt bị lỗi trên Windows trông như thế nào

Lỗi này chỉ xảy ra với các tên có chữ được viết bằng một chữ cái gốc cộng thêm dấu. Tiếng Việt là trường hợp nặng nhất, vì nhiều chữ có hai dấu cùng lúc. Ví dụ chữ "ệ" có thể được lưu thành ba ký tự: "e", dấu mũ tổ hợp và dấu nặng tổ hợp. Ngoài tiếng Việt, lỗi còn gặp ở:

  • Các chữ Latin có dấu khác như José, Zoë, Müller, résumé
  • Tiếng Hàn: mỗi âm tiết được ghép từ nhiều chữ cái nhỏ, nên có thể bị tách thành từng chữ rời
  • Tiếng Nhật: kana có dấu nguyệt (dakuten) hoặc dấu bán nguyệt (handakuten), ví dụ "が" bị tách thành "か" và một dấu rời

Tên không dấu như "bao_cao_cuoi_ky.docx" thì không gặp vấn đề này, nên nhiều người dùng nhiều năm mà không nhận ra.

Các triệu chứng thường gặp trên Windows:

  1. Tên hiển thị với khoảng trống hoặc dấu bị lơ lửng, tách khỏi chữ cái.
  2. Tên trông đúng trong File Explorer, nhưng gõ vào ô tìm kiếm thì không ra kết quả.
  3. Trong cùng một thư mục có hai file trông giống hệt nhau. Một file tạo trên Mac, file kia tạo trên Windows, và Windows không báo gì.
  4. Một đoạn script, phần mềm sao lưu hoặc ứng dụng đồng bộ báo "không tìm thấy file" dù file vẫn nằm đó.
  5. Biểu mẫu trên web từ chối file tải lên, hoặc lưu tên với cách viết kỳ lạ.

Chiều ngược lại cũng xảy ra. Một người dùng Windows gửi file "Nguyễn_Văn_An.jpg" cho người dùng Mac, và một script trên Mac tìm đúng tên theo cách viết của Windows thì bị lỗi. Nguyên nhân gốc vẫn là một.

Vì sao lỗi xảy ra: NFD và NFC bằng ngôn ngữ đơn giản

Unicode là bộ tiêu chuẩn giúp máy tính hiển thị chữ của mọi ngôn ngữ. Bộ tiêu chuẩn này cho phép một số ký tự được viết theo hai cách khác nhau nhưng trông giống hệt nhau trên màn hình.

  • Dạng dựng sẵn (NFC): chữ "ệ" là một ký tự duy nhất. Đây là kết quả khi bạn gõ tiếng Việt trên bàn phím Windows với Telex hoặc VNI, và là cách viết mà hầu hết máy chủ web, cơ sở dữ liệu và hệ thống file đều mong đợi.
  • Dạng tách rời (NFD): chữ "ệ" gồm nhiều ký tự nối với nhau: chữ "e", rồi dấu mũ tổ hợp, rồi dấu nặng tổ hợp. Tiếng Hàn và tiếng Nhật cũng có cơ chế tương tự.

NFC và NFD chỉ là tên kỹ thuật (Normalization Form C và D). Bạn không cần nhớ các chữ cái đó.

Trong nhiều năm, macOS lưu tên file trên ổ đĩa ở dạng tách rời. Các Mac đời mới linh hoạt hơn, nhưng nhiều phần mềm trên macOS vẫn tạo tên ở dạng NFD, kể cả lệnh "Nén" có sẵn trong Finder khi tạo file ZIP. Vì vậy khi file rời khỏi Mac, qua ZIP, USB, email, ổ mạng hay tải lên web, tên của nó thường đi theo dạng NFD.

Windows không tự chuyển đổi gì. Nó coi hai cách viết là hai chuỗi ký tự khác nhau. Do đó bạn có thể có hai file "giống nhau" trong một thư mục, và tìm bằng cách viết dựng sẵn thì không ra file dạng tách rời. Dấu hiển thị đẹp hay bị hở phụ thuộc vào phông chữ và chương trình hiển thị tên, nên cùng một file có thể đẹp trong Explorer nhưng vỡ trong ứng dụng email.

Nội dung bên trong file không bị ảnh hưởng. Một file PDF có tên dạng tách rời vẫn mở bình thường. Chỉ nhãn tên bị sai.

Cách sửa tên file tiếng Việt bị lỗi trên Windows

Hãy chọn cách phù hợp với số lượng file của bạn.

Một hoặc hai file: gõ lại tên trên Windows

  1. Chọn file trong File Explorer và nhấn F2 để đổi tên.
  2. Xóa phần bị lỗi rồi gõ lại bằng bộ gõ của bạn, ví dụ Telex hoặc VNI.
  3. Nhấn Enter.

Windows sẽ lưu tên ở dạng dựng sẵn, nên file hoạt động bình thường. Đừng copy tên cũ rồi dán lại vào, vì như vậy bạn sẽ đưa lại cách viết tách rời.

Cả thư mục đầy file: dùng PowerShell

Windows có sẵn PowerShell, và .NET có hàm chuẩn hóa tích hợp, nên bạn không cần tải thêm gì.

  1. Mở thư mục trong File Explorer.
  2. Bấm vào thanh địa chỉ, gõ powershell rồi nhấn Enter. Cửa sổ PowerShell sẽ mở ngay tại thư mục đó.
  3. Dán dòng lệnh sau và nhấn Enter:
Get-ChildItem -File | Where-Object { $_.Name -ne $_.Name.Normalize('FormC') } | Rename-Item -NewName { $_.Name.Normalize('FormC') }

Phần Where-Object bỏ qua các file đã có tên dạng dựng sẵn, nên chạy lại lần thứ hai cũng không gây hại. Nếu muốn đổi cả tên thư mục, bạn bỏ -File. Nếu muốn áp dụng cho thư mục con, thêm -Recurse sau Get-ChildItem. Với bất kỳ thao tác đổi tên hàng loạt nào, nếu file quan trọng, hãy thử trên một bản sao trước.

Không dùng được dòng lệnh, hoặc đang dùng máy công dụng chung: công cụ trình duyệt

Ứng dụng web FilenameFixer miễn phí và thực hiện cùng phép chuyển đổi trong trình duyệt. Bạn kéo file vào trang, công cụ đổi tên từ NFD sang NFC theo lô, rồi bạn tải kết quả về. Việc xử lý diễn ra cục bộ trong trình duyệt; file và tên file không được gửi lên máy chủ, điều này quan trọng nếu tài liệu là nội bộ hoặc nhạy cảm. Ngoài ra còn có ô văn bản để dán danh sách tên (ví dụ copy từ bảng tính hoặc email) và nhận lại phiên bản dựng sẵn.

Tên file trong ZIP bị lỗi giữa Mac và Windows

File ZIP là nơi lỗi này hay gặp nhất, vì lệnh Nén của Finder ghi tên ở dạng tách rời vào trong archive. Khi người dùng Windows giải nén, mọi tên có dấu bên trong đều ở dạng NFD cùng lúc.

Bạn có thể giải nén trước rồi chạy lệnh PowerShell ở trên. Hoặc, nếu muốn sửa archive trước khi giải nén, FilenameFixer có trang khôi phục tên file trong ZIP. Trang này nhận archive tối đa 200 MB, viết lại các tên bên trong, và trả về một file ZIP giải nén bình thường trên Windows. Công cụ vẫn chạy trong trình duyệt và không tải archive lên máy chủ.

Nếu tên bên trong ZIP không chỉ bị tách mà còn đọc không được (hiện dấu hỏi, ô vuông, hoặc các chuỗi kiểu "é"), đó là một vấn đề khác, thường liên quan đến bảng mã cũ chứ không phải NFD. Khi đó hãy xem hộp thoại "Extract All" của Windows hoặc một phần mềm nén thứ ba có tùy chọn mã hóa ký tự.

Phòng tránh lỗi cho lần sau

Nếu bạn gửi file từ Mac. Khi có thể, hãy tránh dấu và ký tự đặc biệt trong tên file dành cho người dùng Windows. Tên như "bao-cao-thang-3.pdf" đi đâu cũng an toàn. Nếu tên bắt buộc phải giữ đúng dấu, hãy chuẩn hóa tên trước khi gửi và nói rõ với người nhận cách xử lý nếu vẫn thấy lạ.

Nếu bạn tải file lên qua biểu mẫu web. Nhiều website và hệ thống quản trị nội dung lưu tên file ở dạng NFC và xử lý kém dạng tách rời, nên file tải từ Mac có thể bị đổi tên sai hoặc bị từ chối. Tiện ích Chrome FilenameFixer tự chuẩn hóa tên file ngay khi bạn chọn file trong hộp thoại tải lên, nên bạn không cần đổi tên trước. Tiện ích này không có công cụ phân tích (analytics).

Nếu bạn viết script hoặc quản lý máy chủ. Hãy chuẩn hóa tên file về NFC tại điểm file đi vào hệ thống, và chỉ so sánh tên sau khi chuẩn hóa cả hai phía. Trong Python dùng unicodedata.normalize("NFC", name); trong JavaScript dùng name.normalize("NFC"); trong .NET dùng name.Normalize(NormalizationForm.FormC). Người dùng Git trên macOS có thể chạy git config --global core.precomposeunicode true để tên file được ghi ở dạng dựng sẵn, tránh tình trạng file luôn hiện là đã thay đổi khi chuyển giữa Mac và Windows.

Câu hỏi thường gặp

File có bị hỏng không? Không. Chỉ cách viết tên khác đi. Đổi tên không chạm vào nội dung file.

Vì sao tên trông ổn trong Explorer nhưng tìm kiếm hoặc công cụ đồng bộ lại lỗi? Với hầu hết phông chữ, Explorer vẽ hai cách viết gần như giống nhau. Ô tìm kiếm và công cụ đồng bộ so sánh trực tiếp các ký tự, và "ệ" dựng sẵn không bằng "e cộng hai dấu tổ hợp".

Người dùng Mac có xem file đã đổi tên đúng không? Có. macOS hiện đại đọc được cả hai dạng. Dạng dựng sẵn an toàn hơn cho mọi thứ di chuyển giữa các hệ thống.

Có cần cài thêm phần mềm không? Với cách PowerShell thì không. Công cụ trình duyệt chỉ cần Chrome, Edge, Firefox hoặc Safari. Tiện ích Chrome là tùy chọn và chỉ hữu ích khi tải file lên web.

Tóm lại: NFD và NFC là hai cách viết cùng một dãy chữ. macOS thường tạo ra dạng này, còn Windows mong đợi dạng kia. Chuyển đổi tên, bằng cách gõ lại, dùng PowerShell hoặc công cụ trình duyệt, sẽ giúp file hoạt động bình thường trở lại.