同じファイル名が存在する怪

佐野

佐野 2014年8月1日

PCのフォルダやファイルは普通、
同じ階層に同じ名前のものは存在できないはずです。
しかし今日、その現象を目の当たりにしました。

20140801155831

これはサンプルとして作ったものですが、決してコラージュではありません。
全く同じファイル名のファイルを生成できました・・・ように見えます。

最初は、Windowsサーバーにおいて、同名のファイルが存在している事を発見し、
両ファイルの名前をテキストエディタで貼り付け、
文字を見比べたり、部分的に検索するなどして調べてみました。

すると、同じ文字のはずなのに、なぜか検索に引っかからない語句がある。
その中に漢字が含まれていたため、最初は偶然にも全く同じ見た目の
別の文字コードで作成された中国語か何かだと思っていました。

一度、その文字をURLエンコードしてみたところ、
違うコードが含まれている事が判明。
URLエンコードにはこちらを使わせていただきました。

さらに、問題の文言をテキストエディタに貼り付けるなどをして、調べてみました。
すると、サクラエディタで貼り付けた際に、濁点を持った文字、
つまりは「ド」の文字が「ト」と半角スペースで離れている事を発見しました。
「ターン・アント ・フロンティア.png」と、アリさんみたいになっていました。

そこでその部分だけを再度URLエンコードしてみたところ、
エンコード前の文字列に、「゙」と出ていました。
さらに、これは何かと検索をしたところ、「結合文字」という事がわかりました。

つまり先ほどのサンプルで言えば、
「ド」に付いている濁点が、結合文字という全く別の文字だったのです。
濁点と言えば、「だくてん」で変換すれば出てくる「゛」や、
半角カタカナに変換した際に出てくる「゙」ですが、
今回のものは、濁点に対応した文字「かきくけこさしすせそ」等の右につけると、
その文字と一体化して見える「結合文字」という特殊な文字だったようです。

以下にサンプルを置いてみます。

普通の「ド」の場合
ドドドドドドドドドド

結合文字の場合
ドドドドドドドドドド

一見、全く同じように見えますが、
テキストエディタに貼り付けると、
エディタによっては濁点が半角スペースに変わるか、
濁点として表示され、うまく結合されている状態でも、
1文字ずつ消していくと、濁点のみが消えていくはずです。

Wikipediaの関連項目を見ると、結合文字は半濁点にもあるようで、
つまりは「ぱぴぷぺぽ」も存在するとの事です。

さらに「結合文字」で調べてみたところ、
どうやらMac OS Xでファイルやフォルダに名前を付ける際に、
濁点付き文字が、結合文字に変換されてしまうとの事です。
参考:Unicodeの特殊な文字 “結合文字列”

そしてさらに、Mac用の結合文字は、
アプリでAWSにリクエストを投げる際にも、問題が発生するようです。
参考:Macの結合文字列を変換する

もし、存在しないはずの同名ファイルがあった場合、
文字コードに変換したり、濁点と半濁点が結合文字でないかどうかを
疑ったほうがいいかもしれません。