[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 メーリングリストの案内