[PHP-users 30750] Re: Windows + PHP で UTF-8 を扱う

papa pahoo papa @ pahoo.org
2006年 11月 19日 (日) 22:53:24 JST


パパぱふぅです。

塚田さんが

> Windows NT系 (私の記憶している限りでは NT4.0 / 2000 / XP / 2003 / Vista) 
> では SJIS ということは無いと思います。

と指摘されているように、NTFSのロングネームは UTF-16 で格納することが決まっ
ています。これについては、goungounさんも

> 今のWindowsがカーネルレベルではUnicodeで処理しているのは知っていますが

と指摘されているとおりです。ただ、一口にUnicodeといっても複数の実装方式
があり、NTカーネルは、原則として UTF-16 になっています。
そこで、

echo 'UTF-16: '. file_exists(mb_convert_encoding($filename, 'UTF-16')) . "\n";

としてやれば TRUE で返るはずです。
手元の環境(Windows XP SP2 + PHP 4.4.4)でチェックしましたが、上位互換のUTF-32
でもOKでした。

もちろん、UTF-16をUTF-8に変換することは可能ですが、UTF-8は可変長のため、
ファイル名長の数え方がNTFSのそれと異なってきてしまいます。PHPのファイル
処理関数群がUTF-8に対応していないのは妥当な仕様ではないかと感じます。

==========================
  パパぱふぅ
  http://www.pahoo.org/
==========================



PHP-users メーリングリストの案内