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

Tên file tiếng Việt bị lỗi khi chép từ Mac sang Windows: Cách sửa

Nếu bạn thấy tên file tiếng Việt bị lỗi trên Windows sau khi chép từ máy Mac qua USB hoặc ổ cứng gắn ngoài, thì file không hỏng và USB cũng không hỏng. Vấn đề nằm ở chỗ tên file đang được lưu theo một cách "đánh vần" Unicode khác (NFD) so với cách Windows mong đợi (NFC). Tên có dấu như Báo cáo quý 3.docx hay Hợp đồng Nguyễn Văn Hiệp.pdf nhìn thì có vẻ bình thường nhưng gõ vào ô tìm kiếm không ra, một số phần mềm không mở được; tên tiếng Hàn thì vỡ thành từng chữ cái rời; tên tiếng Nhật mất dấu đục. Cách sửa là đổi tên file sang dạng tổ hợp (NFC). Bạn có thể làm ngay trên Windows bằng vài dòng PowerShell, trên Mac bằng một đoạn Python ngắn, hoặc kéo file vào một công cụ chạy trên trình duyệt như FilenameFixer. Cả ba cách đều có hướng dẫn từng bước bên dưới.

Vì sao tên file tiếng Việt bị lỗi khi đi qua USB từ Mac sang Windows

USB mà cả hai máy đều đọc được thường được định dạng exFAT hoặc FAT32. Cả hai hệ thống tập tin này đều không tự ý thay đổi tên file: chúng lưu đúng chuỗi ký tự Unicode mà hệ điều hành đưa cho. Và đó chính là vấn đề, vì macOS và Windows đưa ra hai chuỗi khác nhau cho cùng một cái tên nhìn giống hệt nhau.

Unicode có hai cách để biểu diễn nhiều ký tự:

  • Dạng tổ hợp (NFC): é là một mã ký tự duy nhất. ệ cũng là một mã. 가 (tiếng Hàn) là một mã.
  • Dạng phân rã (NFD): é là chữ e kèm theo một dấu sắc rời. ệ là chữ e + dấu mũ ◌̂ + dấu nặng ◌̣, tức là ba mã ký tự. 가 là phụ âm ㄱ rồi đến nguyên âm ㅏ.

Tiếng Việt bị ảnh hưởng nặng hơn hầu hết các ngôn ngữ khác, vì rất nhiều chữ mang cùng lúc hai dấu: ệ, ờ, ẫ, ứ, ộ, ở... Một cái tên như Nguyễn ở dạng NFD dài tới 8 mã ký tự thay vì 6.

macOS thường tạo ra dạng phân rã khi bạn đặt tên file trong Finder hoặc lưu từ một ứng dụng trên Mac. Windows, các biểu mẫu web và phần lớn máy chủ lại mong đợi dạng tổ hợp. Khi cắm USB vào máy Windows, File Explorer hiển thị đúng những gì nó nhận được, và kết quả trông như sau:

  • Hợp đồng Nguyễn Văn Hiệp.pdf nhìn vẫn có dấu đầy đủ, nhưng gõ Nguyễn hay Hợp đồng vào ô tìm kiếm của Explorer thì không thấy gì. Một số phần mềm kế toán, phần mềm quản lý tài liệu hoặc trang web nhận file sẽ báo lỗi hoặc từ chối nhập. Nhiều người gọi đây là "lỗi font tên file", dù thực ra font không liên quan gì.
  • 보고서.docx từ đối tác Hàn Quốc biến thành ㅂㅗㄱㅗㅅㅓ.docx, hoặc lẫn lộn giữa âm tiết nguyên và chữ cái rời.
  • がくせい.pdf từ khách hàng Nhật hiển thị thành か゛くせい.pdf, với dấu đục trôi lơ lửng cạnh chữ kana.

Không có gì bị hỏng cả. Từng byte nội dung file vẫn nguyên vẹn. Chỉ có tên file được "đánh vần" theo cách mà Windows không coi là giống với tên bạn gõ vào.

Lưu ý: đây là chuyện khác với những rắc rối USB quen thuộc khác, như ổ NTFS chỉ đọc được trên Mac mà không ghi được, hay file trên 4 GB không chép sang FAT32 được. Nếu file chép sang được, mở được, nhưng tên nhìn lạ hoặc tìm không ra, thì bạn đang gặp vấn đề chuẩn hóa Unicode, không phải vấn đề định dạng ổ.

Kiểm tra nhanh: có đúng là lỗi chuẩn hóa Unicode không?

Trước khi đổi tên bất cứ thứ gì, hãy xác nhận nguyên nhân. Trên máy Windows, mở PowerShell ngay trong thư mục trên USB và chạy:

Get-ChildItem -File | ForEach-Object {
  [PSCustomObject]@{
    Name   = $_.Name
    Length = $_.Name.Length
    NFC    = $_.Name.Normalize([Text.NormalizationForm]::FormC).Length
  }
}

Nếu cột Length lớn hơn cột NFC ở một file nào đó, tên file đó chứa ký tự phân rã. Ví dụ Hợp_đồng_Nguyễn.pdf sẽ báo 25 ký tự đang lưu nhưng chỉ 19 ở dạng NFC; một tên tiếng Việt dài có nhiều chữ mang hai dấu sẽ chênh lệch còn nhiều hơn. Dòng nào hai con số bằng nhau thì tên đã ổn, không cần đụng tới.

Sửa ngay trên máy Windows (miễn phí, không cần cài gì)

Đây là cách thực tế nhất khi USB đã nằm trong tay khách hàng hoặc đồng nghiệp đang dùng Windows. Mọi thao tác diễn ra ngay trên USB, hoàn toàn không cần tới máy Mac.

  1. Cắm USB và mở thư mục trong File Explorer.
  2. Bấm vào thanh địa chỉ, gõ powershell rồi nhấn Enter. Một cửa sổ PowerShell sẽ mở ra đúng tại thư mục đó.
  3. Dán đoạn sau vào và nhấn Enter:
Get-ChildItem -Recurse |
  Sort-Object { $_.FullName.Length } -Descending |
  ForEach-Object {
    $nfc = $_.Name.Normalize([Text.NormalizationForm]::FormC)
    if ($nfc -ne $_.Name) {
      Rename-Item -LiteralPath $_.FullName -NewName $nfc
      Write-Host "da doi ten: $nfc"
    }
  }

Đoạn lệnh này duyệt qua mọi file và thư mục trên ổ, đi từ đường dẫn sâu nhất trước để thư mục được đổi tên sau khi nội dung bên trong đã xong, chuyển từng tên sang NFC và chỉ đổi tên khi tên thực sự thay đổi. Tên nào đã ở dạng tổ hợp thì được giữ nguyên. Tham số -LiteralPath rất quan trọng, vì một số tên bị lỗi chứa ký tự mà PowerShell sẽ hiểu nhầm là ký tự đại diện (wildcard).

  1. Nhấn F5 trong Explorer. Tìm Nguyễn giờ sẽ ra file, tên tiếng Hàn và tiếng Nhật cũng hiển thị đúng.

Vài giới hạn cần biết:

  • Nếu trong cùng một thư mục đã có sẵn cả bản NFD lẫn bản NFC của cùng một tên, lệnh đổi tên sẽ thất bại ở cặp đó với thông báo kiểu "file already exists". Bạn phải tự quyết định giữ bản nào.
  • File đang được mở trong phần mềm khác thì không đổi tên được. Hãy đóng Word, Excel, Photoshop... trước.
  • Cách này chỉ sửa bản sao trên USB. Bản gốc trên Mac vẫn mang tên phân rã, nên lần bàn giao sau vẫn sẽ gặp đúng lỗi này nếu không sửa từ gốc.

Sửa trên máy Mac trước khi đưa USB cho người khác

Nếu bạn là người dùng Mac và thường xuyên giao file qua USB, tốt hơn là sửa tên trước khi USB rời khỏi bàn làm việc của bạn. Finder không có tùy chọn nào cho việc này, nhưng vài dòng Python là xong. Python 3 đi kèm với Xcode Command Line Tools; nếu gõ python3 --version trong Terminal mà thấy số phiên bản hiện ra thì máy bạn đã có.

  1. Chép file sang USB như bình thường.
  2. Mở Terminal và chạy đoạn sau, thay TENUSB bằng tên ổ đúng như hiển thị trên màn hình desktop:
python3 - <<'EOF'
import os, unicodedata
root_dir = '/Volumes/TENUSB'
for root, dirs, files in os.walk(root_dir, topdown=False):
    for name in files + dirs:
        fixed = unicodedata.normalize('NFC', name)
        if fixed != name:
            os.rename(os.path.join(root, name), os.path.join(root, fixed))
            print('da doi ten:', fixed)
EOF
  1. Tháo USB (Eject) và nếu có thể, kiểm tra lại trên một máy Windows. Tên file phải hiển thị và tìm kiếm được bình thường.

Hai điều đáng lưu ý. Thứ nhất, đoạn script này chỉ thay đổi chuỗi ký tự được lưu; trên Mac, tên file trước và sau trông giống hệt nhau, đó là chuyện bình thường. Thứ hai, nếu một file đã được đổi sang tên tổ hợp rồi sau đó lại được chỉnh sửa và lưu đè bằng một ứng dụng trên Mac với cùng tên, một số ứng dụng sẽ ghi lại dạng phân rã. Vì vậy hãy chạy script ngay trước lúc đưa USB đi, chứ không phải từ mấy ngày trước.

Nếu bạn không muốn đụng tới Terminal

FilenameFixer thực hiện đúng phép chuyển đổi này ngay trên trình duyệt. Kéo file từ USB thả vào trang, công cụ sẽ đổi tên hàng loạt từ NFD sang NFC; không có gì được tải lên máy chủ, vì tên file được xử lý ngay trong trình duyệt của bạn. Nó xử lý được trường hợp tiếng Việt mang hai dấu, tiếng Hàn vỡ chữ, tiếng Nhật mất dấu đục và các chữ Latinh có dấu bị tách rời. Công cụ miễn phí, có giao diện tiếng Việt và chạy trên Chrome, Edge, Safari hay Firefox ở cả hai máy.

Nếu bạn giao hàng dưới dạng một file ZIP thay vì file rời, thì bên trong file nén vẫn mang nguyên những cái tên phân rã, và khi giải nén trên Windows tên sẽ lỗi y như vậy. Công cụ khôi phục tên file trong ZIP ghi lại tên bên trong file nén (tối đa 200 MB) để người nhận giải nén ra là có tên sạch, không cần chạy lệnh gì.

Cách tránh lỗi này ở lần bàn giao sau

Vài thói quen nhỏ giúp loại bỏ hẳn vấn đề, dù bạn đứng ở phía nào của cuộc trao đổi:

  • Thống nhất quy ước đặt tên khi giao file cho khách. Với những file sẽ được nhập vào một hệ thống khác (phần mềm kế toán, CMS, kho ảnh), tên không dấu kiểu hop-dong-nguyen-van-hiep-2026-10.pdf tránh được lỗi chuẩn hóa và cả chục rắc rối bảng mã khác cùng lúc. Tên tiếng Việt có dấu đầy đủ thì để trong nội dung tài liệu hoặc trong ghi chú gửi kèm.
  • Chuẩn hóa ngay trước khi tháo USB. Chạy đoạn Python hoặc thả thư mục vào công cụ trên trình duyệt như bước cuối cùng, sau khi đã chỉnh sửa xong mọi thứ.
  • Giữ sẵn một đoạn kiểm tra phía Windows. Đoạn so sánh độ dài ở trên chỉ mất vài giây và cho biết ngay USB từ Mac có cần sửa hay không, trước khi ai đó bắt đầu nhập file vào một hệ thống sẽ âm thầm từ chối chúng.
  • Đừng format lại USB với hy vọng hết lỗi. NTFS, exFAT hay FAT32 đều lưu tên đúng như được đưa vào. Định dạng lại không thay đổi gì về chuẩn hóa; chỉ có đổi tên mới giải quyết được.

Một khi tên file đã ở dạng tổ hợp, tìm kiếm trên Windows sẽ ra kết quả, việc nhập dữ liệu thành công, và người nhận không bao giờ phải thắc mắc vì sao gõ Nguyễn mà máy báo không tìm thấy file nào.