開けない日本語のファイル名のZipファイル

後輩「先輩。お客さんから貰ったZipファイルが開けないです。」
先輩「どれどれ・・・あぁ、とりあえず、ファイル名をfile.zipに変えてから解凍してみたら?」

受け取ったZipファイルが開けない!とは良く聞く話で、
送り主に聞いてもちゃんと解凍出来ると言われて困るというのも、ここ数年良く聞きます。

そんなときに試してみたいのは、ファイル名を変えて解凍です。

後輩「解凍出来ました!でもどうして解凍出来なかったんでしょう?」
先輩「詳しく話すと長くなるけど、大丈夫?」
後輩「頑張ります」

というわけで、後輩君が持ってきたZipファイルをもう一度見て見ると
「先日の件のファイルです.zip」
となっていました。
実は、この「で」が問題を起こしていた元凶です。

後輩「え?ひらがながダメなんですか?」
先輩「いや、ひらがなが問題というよりも、これサロゲートペア文字の事があるのが問題なんだ。

サロゲートペア文字というのは、異なる2つの文字を組み合わせて1つの文字を表す仕組み。
WindowsVistaの登場前後で話題になって颯爽と話題から消えていた文字体系ですが、別に無くなったわけではなく、今も普通に生き残っています。(補注:今回の件は別にWindowsが悪いわけではないです。Windowsは規格通りに文字を処理しているだけで、サロゲートペア文字になったりするのは、使っているメールソフト等の問題です。)

例えば、「て」と「゛」が連続していたら「で」と表示するというもの。

そして、サロゲートペア文字に対応してないZipファイルの解凍ソフトというのも、少なからず存在しているので、冒頭の様な現象が起こるわけだ。

後輩「あれ?でも、自分がいつもお客さんに送っているファイルは問題無く解凍出来ているみたいですけど?」
先輩「あぁ、サロゲートペア文字が混ざってなかったんだろうね。」

実は「で」という表示にはサロゲートペア文字を使っても使わなくても表示できる。

文字には1つ1つ、文字コードという番号が振られているけれど、昔から日本語圏で「で」という文字に使われていた文字コードは「U+3067」。
この文字コードの「で」を使う分にはサロゲートペア文字に未対応のソフトでも問題は無い。

一方で「て」(U+3066)と「゛」(U+3099)という組み合わせは見た目は「で」だけど、こちらはサロゲートペアとして見た目上1文字になっている実質2文字の文字。

なので、見た目が一緒のファイルを送っても実はファイル名が違うって事がある。ちょうど、こんな具合にね:

サロゲートペア文字のファイル

ちなみに、濁点にはサロゲートの濁点(U+3099)の他に、単なる濁点(U+309B)もあって、これは「て」と組み合わせても「て゛」と見た目も2文字になる。
こちらは、サロゲートペアではないので問題無く解凍出来るはずだ。

後輩「なるほど。あれ?でもサロゲートペアってひらがなだけでしたっけ?」
先輩「いや、他にもたくさんあるよ。」

実際、今回は「で」の例を挙げたものの、他の濁音、半濁音でも同じ問題が起こりえます。
また、漢字にもサロゲートペア文字もあります。

後輩「なら、サロゲートペアの文字を使わないでファイル名を付けるように気をつければいいんですね?」
先輩「それが出来れば苦労しないんだけどね。」

実際、普通にPCで文字を入力している分には、サロゲートペア文字で日本語を入力することは、まず起こりえない。

ただ、一部のソフトは、非サロゲートペア文字をサロゲートペア文字に勝手に変換する事がある。
その結果、Aさんがファイルをメールで送って、Bさんがそのファイルを別のメールに添付してCさんに送ると、Cさんに届いたファイルがサロゲートペアになっていた・・・って事も良く聞くパターンだ。

後輩「え?そこまで考えるとどうすれば・・・」
先輩「サロゲートペアにも存在する文字は避けるか、地道に啓蒙するしか無いね」

  1. 日本語のファイル名を避ける
  2. 日本語でも、濁音、半濁音の文字を避ける。
    ※漢字のサロゲートペア文字は普段使う事は、まず無いので。
  3. サロゲートペアに対応した解凍ソフトを使う&使わせる。

先輩「個人的には3番目を押したいけど、現実問題としては2番だろうなぁ。」
後輩「なるほど、分かりました!ありがとうございます。」
先輩「いえいえー」