Macのファイル名で濁点が分離する:アップロード時の5つの症状と対処法
Macからサイトにアップロードしたファイル名の濁点が分離する(「が」が「か゛」に見える)、ダウンロードリンクが「ファイルが見つかりません」になる、ファイル一覧には出ているのに検索でヒットしない。こうした症状の原因は、ほぼ間違いなくファイル名のUnicode正規化形式の違い(NFDとNFC)です。macOSはかな・ハングル・アクセント付きアルファベットを「分解された形(NFD)」で保存することが多く、一方でWebサーバー、CMS、ブラウザの大半は「合成された形(NFC)」を前提にしています。直し方は、アップロードする前にファイル名をNFCに変換しておくか、受け取る側のサーバーで正規化することです。以下、この食い違いがWebサイト上で引き起こす5つの症状と、それぞれの意味、最短の対処法を説明します。
Macのファイル名で濁点が分離する仕組み
Unicodeでは、同じ文字を2通りの方法で表せます。たとえば「が」は、1つのコードポイント(U+304C)で表す「合成形」と、「か」のあとに結合用の濁点(U+3099)を続ける「分解形」があります。画面上の見た目は同じです。半濁点の「パ」も同様で、「ハ」+結合用半濁点に分かれることがあります。韓国語の「한글」は合成済みの音節2文字か、字母(ㅎ ㅏ ㄴ ㄱ ㅡ ㄹ)の連なりか。フランス語の「é」は1文字か、「e」+アクセント記号か。すべて同じ話です。
macOSは、こうした文字を含む名前でファイルを保存すると、歴史的に分解形(NFD)を生成してきました。それ以外のほぼすべて、つまりWindows、Linuxサーバー、PHP、Node、PythonのWebフレームワーク、そして結果を表示するブラウザはNFCを前提にしています。NFDの名前がNFC前提のシステムに入っても、システムは「直して」はくれません。単に別の文字列として扱います。この1つのズレが、以下に挙げる症状のすべてを説明します。
影響を受けるのは、ファイル名に日本語やアクセント付き文字が含まれる人です。報告書_がいよう.pdf、パンフレット_2026.pdf、ぷれぜん資料.pptx、韓国の取引先から届いた예산안_2026.xlsx、Café_メニュー.pdfなどが該当します。ファイル名が半角英数字だけ(report_2026.pdf)なら、この問題は起こりません。
よく「ファイル名が文字化けする」と表現されますが、文字コードそのものが壊れているわけではなく、正規化形式が違うだけという点が、通常の文字化けとの違いです。
5つの症状と、それぞれの直し方
1. アップロード後、濁点や文字がバラバラに表示される
見え方: CMSや学習支援システム、顧客向けポータルのファイル一覧で、か゛いよう.pdfのように濁点が浮いて見える、ハ゜ンフレット.pdfと半濁点が離れて見える、あるいは韓国語の名前がㅎㅏㄴㄱㅡㄹ.docxと1字ずつ分かれて見える。別の環境では正常に見える。
原因: サイト側のフォントや描画処理が、基底文字と結合記号を1文字にまとめる方法を知らないため、横に並べて描いてしまう。
対処: ファイル名をNFCに変換してから、あらためてアップロードします。壊れたエントリを自分で削除できないサービスなら、管理者に削除を依頼してください。修正版をアップロードしても、上書きではなく2つ目のファイルとして登録される可能性が高いためです(症状4を参照)。
2. ダウンロードリンクが404や「ファイルが見つかりません」になる
見え方: アップロードはエラーなく完了し、メディアライブラリにも表示される。ところがリンクをクリックすると404になるか、「ファイルが存在しません」と表示される。
原因: サーバーはNFDの名前でファイルを保存したのに、生成されたリンクやデータベースの記録は途中のどこかでNFCに正規化されています。URLが指している名前は、ディスク上の実ファイルとバイト列が1か所だけ違う。アドレスバーで見ると両者は同じに見えます。
対処: 単発であれば、NFCの名前で再アップロードします。自分が運営しているサイトで起きるなら、根本的な修正はサーバー側です。受け取ったファイル名を保存前に必ずNFCへ正規化します。Pythonならunicodedata.normalize("NFC", name)、JavaScriptならname.normalize("NFC")、PHPならNormalizer::normalize($name, Normalizer::FORM_C)です。アップロードの入り口で一度やっておけば、全利用者の問題が消えます。
3. 目の前にあるのに検索でヒットしない
見え方: サイトの検索欄に「がいよう」と入力しても、ファイル一覧でCtrl+F(MacならCmd+F)で探しても、何も一致しない。一覧にはファイルが見えている。
原因: 検索はバイト列を比較します。入力したのはNFC、保存されているのはNFD。等しくないので一致しません。メールソフトで添付ファイル名を検索したときにも同じことが起こります。
対処: NFCに変換して再アップロードします。応急処置としては、濁点・半濁点を含まない部分だけで検索すると(「がいよう」ではなく「いよう」)、どちらの形式にも一致します。
4. 「同じ名前のファイルが既にあります」または見た目が同一の2ファイル
見え方: アップロードを拒否されるか、まったく同じ名前に見えるファイルが2つ並んでしまう。
原因: 片方がNFD、もう片方がNFCです。システムにとっては別の名前なので、名前の対応表で衝突とみなすか、両方をそのまま保存します。
対処: NFDのコピーを削除し、NFCのほうを残します。見た目で判別できないときは、両方ダウンロードして確認します(後述「どちらの形式か見分ける方法」)。
5. スクリプトやインポート、フォームがファイル名を拒否する
見え方: 一括インポート機能、ファイル名を検証するフォーム、ビルドスクリプトなどが「無効な文字が含まれています」と失敗する。名前には普通の文字しか使っていないのに。
原因: 正規表現で書かれた検証ルールは、合成済みの文字は許可しても結合記号は許可していないことが多い。分解形の「が」にはU+3099が含まれ、多くの「文字のみ」パターンはこれを通しません。
対処: 検証処理にファイルが届く前にNFCへ正規化します。検証側を自分で管理しているなら、先に入力を正規化してから検証してください。
どちらの形式か見分ける方法
見た目では判別できないのが、この問題の厄介なところです。確実な確認方法を3つ挙げます。
- Macのターミナルで:
ls | xxd | head。合成形の「が」はe3 81 8c、分解形はe3 81 8b e3 82 99(「か」のあとに結合用濁点)と表示されます。 - WindowsのPowerShellで:
[int[]][char[]]"が"でコードポイントが表示されます。12364なら合成形、12363, 12441なら分解形です。 - ブラウザのコンソールで:
"が".normalize("NFD") === "が"がtrueを返せば、貼り付けた文字列はすでにNFDです。
Finderで名前を手入力し直すと、NFCになることもならないこともあります。ファイルシステムや入力方法に左右されるため、入力し直すだけでは確実な対処とは言えません。
アップロード前にファイル名をまとめて直す
1〜2個のファイルなら、Windows側で名前を付け直すか、アップロード後にサーバー上でリネームすれば済みます。しかし、濁点入りの写真が80枚あるフォルダや、1学期分の韓国語教材となると現実的ではありません。
追加ツールなしでできる方法:
- 半角英数字だけの名前にする。
gaiyou_2026.pdfなら、この問題は原理的に起こりません。公開リンクになるものには最も堅実な選択です。 - 1行スクリプトで正規化する。
python3が使える環境なら、for f in *; do mv "$f" "$(python3 -c 'import sys,unicodedata;print(unicodedata.normalize("NFC",sys.argv[1]))' "$f")"; doneで変換できます。ただし、間違ったフォルダで実行すると意図しないファイルまでリネームされます。 - サーバー側で直す。 自分が管理するサイトなら、アップロード時の正規化は自分だけでなく今後のすべての利用者を守ります。
スクリプトを実行したくない場合は、FilenameFixerという無料のWebアプリがまさにこの変換を行います。ブラウザにファイルをドラッグ&ドロップすると、NFDからNFCへまとめてリネームされます。処理はサーバーではなく手元のブラウザ内で行われ、ファイルやファイル名はアップロードされません。テキストの貼り付けにも対応しているので、名前を1つだけ素早く確認したいときにも使えます。また、ZIPアーカイブ内のファイル名を復元する機能もあり、200 MBまで対応しています。Macで作ったzipをWindowsで開いたときの文字化けはこれで対処できます。アップロードの場面に限って言えば、同梱のChrome拡張機能を入れておくと、Webサイトにファイルをアップロードする瞬間にファイル名が自動で正規化されるため、症状1〜5がそもそも発生しません。サイトは日本語のほか、英語、韓国語、フランス語、ドイツ語、スペイン語、ベトナム語で利用できます。
正直に書いておくべき限界が1つあります。どの方法も、すでに壊れた名前でサーバー上に置かれているファイルを修復することはできません。その場合は削除して再アップロードするか、サイトの運営者にディスク上でリネームしてもらってください。
早見表
| 症状 | 起こる場所 | 対処 |
|---|---|---|
| 濁点が分離、文字がバラバラ | ファイル一覧、メディアライブラリ | NFCに変換して再アップロード |
| ダウンロードリンクが404 | 公開URL、CMS | 再アップロード、サーバー側で正規化 |
| 検索でヒットしない | サイト内検索、Ctrl+F、メール | NFCに変換、濁点のない部分で検索 |
| 重複、「既に存在します」 | アップロード、共有フォルダ | NFDのコピーを削除 |
同じに見える2つの名前が別の文字列になり得る、と分かってしまえば、ここに挙げた症状はどれも予測できるものになります。ファイルがMacを離れる前か、サーバーの入り口でNFCに正規化しておけば、Webサイトは最初から期待していたとおりにその名前を扱ってくれます。