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

goungoun gounx2 @ gmail.com
2006年 11月 20日 (月) 13:02:31 JST


こんにちは。

# 解決しているようなので、コメントだけになりますが。

On Sun, 19 Nov 2006 22:53:24 +0900
papa pahoo <papa @ pahoo.org> wrote:

> 塚田さんが
> 
> > 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";

まとめると、Win NTカーネル 上でPHPを使ってる場合、
マルチバイト文字を含むファイル名であっても
echo 'UTF-16: '. file_exists(mb_convert_encoding($filename, 'UTF-16')) . "\n";
echo 'SJIS: '. file_exists(mb_convert_encoding($filename, 'SJIS')) . "\n";
の2つがTrueになる。

# 同じ関数が、2つの文字コード*のみ*をサポートしているというのは、
# なんだか不思議な気もしますね。

マニュアル上で、マルチバイト文字を含むファイル名を使う場合に、
PHPのファイル処理関数群をどのように使えばよいかの記載を見つけることが
できませんでした。ドキュメント化されていない動作なのかな。

-- 
goungoun <gounx2 @ gmail.com>
http://goungoun.dip.jp/app/



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