← All articles

Mac ZIP Accented Filenames Broken on Windows: the Fix

If a Mac ZIP with accented filenames opens on Windows with names like José_contract.pdf instead of José_contract.pdf, the archive was unpacked with the wrong text encoding; extracting it again with 7-Zip or another UTF-8-aware tool usually fixes it. If the names look right but searches miss them, uploads are rejected, or you suddenly have two files called Zoë.jpg side by side, the accents are stored as two characters (an "e" plus a floating accent mark) and need to be normalized. Both problems come from the same ZIP, and they have different fixes, so the first job is telling them apart.

Why Mac ZIP accented filenames break on Windows

A ZIP file does not carry a single, universal rule for how filenames are encoded. Each program that creates an archive decides how to write the names, and each program that opens one decides how to read them. Macs and Windows PCs made different choices for years, and accented Latin letters sit right on the fault line.

Cause 1: mojibake from the wrong code page

When you right-click a folder in Finder and choose Compress, macOS writes the filenames inside the ZIP as UTF-8. Older versions of Windows Explorer, and some third-party tools, assumed names in a ZIP used the legacy Windows code page instead. Reading UTF-8 bytes as if they were Windows-1252 turns é into é, ë into ë, and ñ into ñ. That is why José becomes José and Zoë becomes Zoë.

This is purely a display and extraction problem. The bytes in the archive are fine; the tool that unpacked them guessed wrong.

Cause 2: decomposed accents (NFD) that look correct but are not

Even when the extraction goes perfectly, there is a second, quieter issue. macOS tends to store an accented letter as two Unicode code points: the base letter followed by a separate combining accent. Linguists call this Normalization Form D (NFD). Windows, web browsers and most servers expect the single precomposed character, Normalization Form C (NFC).

Windows will happily create a file whose name contains e + combining acute accent. On screen it renders as é, so nothing looks wrong. But to the file system it is a different string from the é you type on a Windows keyboard. The consequences show up later:

  • Windows Search and the Explorer search box do not find José when you type it.
  • A script or spreadsheet lookup that matches on filename fails on exactly the accented files.
  • Copying the extracted folder next to an existing one produces apparent duplicates: résumé.docx twice, with different sizes and dates.
  • A web form or document portal rejects the upload, or stores the name with odd %CC%81 sequences in the URL.

If your symptoms match this list, re-extracting will not help. The names need to be converted from NFD to NFC after extraction.

Quick check: which problem do you have?

You can usually tell from the file list alone.

  1. Garbage characters are visible (é, ë, ’, ñ): this is the code-page problem, Cause 1. Go to the next section.
  2. Names look normal but behave oddly: likely NFD, Cause 2. Confirm it in PowerShell:
$name = (Get-Item -LiteralPath "C:\Users\you\Downloads\extracted\José_contract.pdf").Name
$name.Length
$name.IsNormalized([Text.NormalizationForm]::FormC)

Paste the path to one of the suspicious files. If Length is one higher than the number of characters you can see (José_contract.pdf is 17 characters, but NFD gives 18) and IsNormalized returns False, the name is decomposed.

A faster check if you prefer the mouse: press F2 on the file in Explorer, put the cursor right after the é, and press Backspace once. If only the accent disappears and a plain e is left behind, the accent was a separate character.

Fixing mojibake: extract the Mac ZIP with a UTF-8-aware tool

Delete the badly named extracted folder so you do not end up with two copies, then unpack the original .zip again with a tool that reads UTF-8 names.

7-Zip (free, Windows)

  1. Install 7-Zip from its official site if you do not have it.
  2. Right-click the ZIP in Explorer and choose 7-Zip › Extract Here (on Windows 11, you may need Show more options first).
  3. Check the extracted names. José should now read José.

Windows 10 and 11 built-in extraction

Recent Windows builds handle UTF-8 names in ZIPs far better than older ones. If a colleague on an up-to-date machine extracts the same archive without garbage, the issue is your extraction tool, not the file. Try Extract All from Explorer, or in PowerShell:

Expand-Archive -LiteralPath "C:\path\to\archive.zip" -DestinationPath "C:\path\to\output"

If 7-Zip also shows garbage

Occasionally the Mac side used an old or unusual archiver that wrote names in Mac OS Roman or another legacy encoding. 7-Zip and WinRAR let you choose a code page when opening an archive; cycle through the Western European options until the names read correctly. If nothing works, ask the sender to recreate the archive from Finder's Compress command or with zip -r in Terminal, both of which write UTF-8.

Once the names display properly, run the NFD check from the previous section. It is common to fix Cause 1 and then discover Cause 2 underneath it.

Fixing decomposed accents after extraction

This step converts e + combining accent into a single é, and the same for every other accented or special letter in the folder. There are two practical routes.

Option A: PowerShell rename (no extra software)

This renames every file and folder under a path to its NFC form. Run it on a copy first if the folder matters.

$root = "C:\path\to\extracted"
Get-ChildItem -LiteralPath $root -Recurse |
  Sort-Object { $_.FullName.Length } -Descending |
  ForEach-Object {
    $fixed = $_.Name.Normalize([Text.NormalizationForm]::FormC)
    if ($fixed -ne $_.Name) {
      $target = Join-Path $_.Directory.FullName $fixed
      if (Test-Path -LiteralPath $target) {
        Write-Warning "Skipped (name already exists): $($_.FullName)"
      } else {
        Rename-Item -LiteralPath $_.FullName -NewName $fixed
      }
    }
  }

Notes on what it does:

  • Deepest items are renamed first so folder renames do not invalidate the paths of files inside them.
  • If a correctly named file already exists (the "two Zoë.jpg" situation), it skips rather than overwriting, and tells you which ones to merge by hand.
  • -LiteralPath matters; without it, brackets in filenames can be misread as wildcards.

Option B: fix the ZIP itself before extracting

If you would rather not run scripts, or you need to pass a clean archive on to someone else, FilenameFixer's ZIP restore tool takes the original Mac ZIP (up to 200 MB), rewrites the decomposed names inside it to NFC, and gives you a corrected archive to download. The processing happens in your browser; the archive is not uploaded to a server, which matters when the ZIP contains client contracts or personnel files. It is free, and the same web app also handles loose files by drag and drop if you have already extracted the folder.

Both routes produce the same result: names Windows Search, scripts and web forms treat as ordinary é, ë, ñ, ü and so on. The fix is not limited to Latin accents; the same conversion repairs Korean names that arrive as separated letters and Japanese kana with the dakuten split off, which you will meet in archives from Korean or Japanese colleagues.

Preventing the problem on the next archive

Most of this can be headed off at the source, though not all of it.

  • Ask the sender to compress from Finder or with zip -r in Terminal. Both write UTF-8 names, which removes the mojibake risk on current Windows versions. Neither normalizes to NFC, so the second problem can still occur.
  • Avoid accented characters in filenames that will cross platforms where it is reasonable. jose_contract.pdf survives everything. This is a workaround, not a fix, and it is not an option when the accents are part of people's names or legal document titles.
  • Fix names at upload time if your real pain point is a web portal rejecting Mac files. The FilenameFixer Chrome extension converts filenames to NFC automatically as you upload on websites, so the portal receives José as one character.
  • For developers: normalize filenames to NFC on the server side when accepting uploads, and in build or sync scripts that compare paths across macOS and Windows checkouts. Python's unicodedata.normalize("NFC", name) and .NET's String.Normalize() are the usual tools. Git has core.precomposeunicode to deal with the same issue in repositories cloned on Macs.

One honest limit: if a Windows user has already renamed, edited and saved files with decomposed names for months, converting them later can collide with correctly named copies of the same documents. The PowerShell script above and the ZIP tool both leave the originals intact in that case, but merging the two versions is a manual job. Catching the archive at extraction time, as described here, is far less work than untangling it later.