MacとWindowsでファイル名が文字化け?共有フォルダに重複ファイルが出る原因と直し方
MacとWindowsでファイル名が文字化けする、あるいは共有フォルダに プロジェクト概要_最終版.xlsx という同じ名前のファイルが2つ並び、片方だけ開けない。Windowsの検索では目の前にあるファイルが見つからない。こうした症状は、ファイル名のUnicode正規化形式が食い違っているときに起こります。Macを使っている同僚が、濁点・半濁点付きのかな、ハングル、アクセント付きのアルファベットを含む名前を「分解形(NFD)」で保存し、WindowsやLinuxサーバー、多くのWebサービスは「合成形(NFC)」を前提にしているためです。画面上はまったく同じ名前に見えても、バイト列としては別物なので、ストレージは2つのファイルとして並べて保存します。直し方は、該当ファイルを一度NFCに名前変更し、再発しないようにいくつかの運用ルールを決めることです。
なお、ファイル名が �� や 縺ァ のような記号だらけになる場合は、文字コード(Shift_JISとUTF-8)の問題で、この記事の対象とは別の原因です。この記事では「文字は読めるのに濁点が分離する」「同じ名前のファイルが2つできる」というケースを扱います。
MacとWindowsでファイル名が文字化けして重複する仕組み
Unicodeには、同じ文字を2通りの方法で表す仕組みがあります。たとえば「が」は、1つのコードポイント(U+304C、合成形=NFC)で書くこともできれば、「か」(U+304B)の後ろに結合用の濁点(U+3099)を続けて書くこともできます(分解形=NFD)。「パ」なら「ハ」と結合用の半濁点に分かれます。同じことが「ヴ」「ジ」「ボ」など濁点・半濁点付きのかな全部、Müllerの「ü」、Joséの「é」、そしてハングルの全音節(한글はバイト列上ではㅎㅏㄴㄱㅡㄹに分解)に当てはまります。
macOSは歴史的にファイル名をNFDで保存してきており、Finderや多くのMacアプリは今でもその形で名前を作ります。一方、Windowsで入力・保存される名前はNFCです。どちらのOSも相手の形式を正しく表示できるため、共有ストレージ上でファイルが出会うまで誰も気づきません。
- SMB共有やNAS(Synology、QNAP、Windowsファイルサーバー、LinuxのSamba共有)。 ファイルシステムはクライアントが送ってきたバイト列をそのまま保存します。MacユーザーがNFD版を保存し、後からWindowsユーザーがNFC版を保存すると、同じ名前のファイルが2つできます。どちらのクライアントも、それらを同じ名前とは扱いません。
- Google Drive、Dropbox、OneDrive。 デスクトップ同期クライアントは、端末間でファイル名を比較します。クライアントとバージョンによっては、MacからのNFD名とPCからのNFC名が別ファイルと判定され、「競合コピー」が作られたり、気づかないうちに重複が増えたりします。Web画面で検索しても片方しかヒットしないことがあります。
- Slack、Teams、メール。 添付ファイルは、送信者の端末が付けた名前をそのまま持ち運びます。Macの同僚から
企画書_ブランド刷新.pdfをダウンロードしたWindowsユーザーのディスクには、NFDの名前で保存されます。開く分には問題ありませんが、後で同じ名前をキーボードで打って検索しても、Windowsの検索は一致しません。 - スクリプト、ビルドツール、Git。 文字列をバイト単位で比較するものはすべて、2つを別のパスとして扱います。Mac上のGitが、濁点付きの名前のファイルを「削除されて再追加された」と報告したり、Windowsのチームメイトがコミットしたファイルを見つけられなかったりします。
重要なのは、何も壊れていないという点です。ファイルの中身はすべて無事で、「同じ文字をどう綴るか」について名前が食い違っているだけです。
どちらのコピーがNFDなのかを見分ける
名前を変更する前に、診断を確定させましょう。目で見ても違いは分からないので、コードポイントを確認する必要があります。
Windowsの場合(PowerShell)
- エクスプローラーで対象のフォルダーを開き、アドレスバーをクリックして
powershellと入力し、Enterキーを押します。 - 次のコマンドを実行します。
Get-ChildItem | ForEach-Object { "$($_.Name) -> $([int[]][char[]]$_.Name -join ' ')" } - 重複している2つを比べます。NFCの「が」は
12364と1つの数字で表示されます。NFDの「が」は12363 12441(「か」+結合用の濁点)になります。「パ」ならNFCは12497、NFDは12495 12442です。「é」はNFCが233、NFDが101 769。ハングルはNFCなら44032〜55203の範囲の数字1つ、NFDなら4352〜4607の数字の並びとして現れます。
Macの場合(ターミナル)
- ターミナルを開き、
cdと入力してからFinderのフォルダをウィンドウにドラッグし、Enterキーを押してそのフォルダに移動します。 - 次のコマンドを実行します。
python3 -c "import os,unicodedata as u; [print(n, 'NFD' if n!=u.normalize('NFC',n) else 'NFC') for n in os.listdir('.')]" NFDと表示された名前はすべて、WindowsやLinuxがNFC版とは別ファイルとして扱うものです。
ターミナルを使わずに確認する
ファイルのプロパティ(Macなら「情報を見る」)からファイル名をコピーし、FilenameFixerのWebアプリにあるテキスト変換欄に貼り付けます。変換結果が貼り付けた文字列と異なれば、その名前はNFDでした。変換はブラウザ内で行われ、サーバーには送信されません。
すでにあるファイルを直す
まず、どちらのコピーが最新かを決めます。両方を開き、更新日時を確認して、新しいほう、または内容が揃っているほうを残します。残したファイルの名前をNFCにします。
方法1:Windowsで名前を打ち直す
ファイルを右クリックして「名前の変更」を選び、名前を全部消してからキーボードで入力し直します。Windowsで入力した文字はNFCになるので、打ち直した名前は必ず期待どおりの形式になります。1〜2個のファイルならこれで十分で、ツールは要りません。ただし古い名前をコピーして貼り付け直すのは効果がありません。貼り付けではNFDのバイト列がそのまま保たれるためです。
方法2:共有フォルダに置く前にMac側でまとめて変換する
ファイルの発生源がMacなら、大元で直すのが確実です。FilenameFixerのWebアプリを開き、ファイルまたはフォルダごとページにドラッグ&ドロップすると、NFCに変換した名前で保存し直せます。無料で、複数ファイルを一括処理でき、ブラウザ内でローカルに動作するためファイル自体がパソコンの外に出ることはありません。デザイナーや翻訳者が、濁点付きやハングルの名前の素材を数十個まとめて共有フォルダに入れようとしている、という場面で現実的な選択肢です。
方法3:LinuxのNASやサーバーでコマンドラインを使う
NASやSambaサーバーにシェルでログインできるなら、convmv でその場で正規化できます。
convmv -f utf8 -t utf8 --nfc -r /volume1/shared/project
まず --notest を付けずに実行して、何が変更されるかを確認してから、--notest を付けて適用します。convmv が入っていない環境では、Pythonの unicodedata.normalize('NFC', name) を短い os.rename のループで回せば同じことができます。
方法4:PowerShellでWindowsのフォルダーごと処理する
Get-ChildItem -Recurse | Where-Object { $_.Name -ne $_.Name.Normalize('FormC') } |
ForEach-Object { Rename-Item $_.FullName $_.Name.Normalize('FormC') }
NFC版がすでに存在する場合、そのファイルの Rename-Item は失敗します。これは安全装置として役立ちます。片方を上書きしてしまうのではなく、2つのコピーを意図的に統合するよう促してくれるからです。
Slackやメールで届いたzipファイル
Macユーザーが圧縮したzipの中に重複の元が入っている場合、Windowsで解凍するたびに展開先のフォルダーで同じ問題が再現します。解凍後に名前を変更して回るより、アーカイブをzipファイル名復元ツール(200MBまで)に通すほうが手早いです。中のエントリ名をNFCに書き換えた、そのまま正常に展開できるzipが返ってきます。
次の重複を防ぐ
名前の変更は一度きりの片付けです。その後も共有フォルダをきれいに保つための習慣をいくつか挙げます。
- アップロード時に正規化する。 チームの作業が主にGoogle Drive、Slack、ブラウザベースの文書管理システム上で行われるなら、MacユーザーはFilenameFixerのChrome拡張機能を入れておけます。Webサイト経由でファイルをアップロードするたびにファイル名を自動的にNFCへ変換するので、NFDの名前がそもそもサービスに届きません。
- すべてのMacでGitの
core.precomposeUnicodeを設定する。git config --global core.precomposeUnicode trueを実行します。GitはNFDのパスをNFCに変換してから保存するようになり、MacとWindowsの間で起こる「削除して再追加」の無駄な差分が止まります。 - 共有フォルダの階層やテンプレートを作る担当者を1人に決める。 フォルダ名はファイル名よりはるかに頻繁にコピーされます。プロジェクトのルートが
デザイン素材_2026でNFDになっていれば、Macユーザーが作るサブフォルダはすべてその問題を引き継ぎます。構造をWindows側で作るか、一度だけ正規化しておけば、将来の重複の大部分を防げます。 - 長く使う共有パスでは、できるだけ半角英数字にする。 これはいつでも受け入れられる案ではありません。日本語や韓国語のチームなら特にそうですし、自分の名前を英語風に書き換える必要も誰にもありません。ただ、
2026-Q3-budgetのような社内向けの識別子なら、第3四半期予算_ドラフトの代わりに英数字を使ってもコストはゼロで、この問題を丸ごと回避できます。 - 原因ではなく症状に気づく。 「検索で見つからない」「同期が競合コピーを作る」「同じファイルが2つあって片方が0バイト」はすべて同じ不具合です。チームメイトからこうした報告があったら、誰かがファイルを削除し始める前にコードポイントを確認してください。
ここまでの対処に、ソフトを買う必要はありません。名前の打ち直し、PowerShell、convmv、Gitの設定はすべてOSに標準で入っているか無料で使えます。FilenameFixerが役に立つのは、対象のファイル数が多いとき、ファイルがまだMacから出ていないとき、そしてアップロードのたびに思い出さなくても変換が裏で済んでいてほしいときです。