トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Windows上でのPerl,PHP,Rubyのchdirの挙動について

実験内容

WindowsにインストールしたPerl,PHP,Rubyで

chdir('表');
chdir('../');

という動作をするスクリプトを動かしてみる。

実験結果

Perl

  • 前提条件
    • ActivePerl 5.12.1
    • ソースエンコーディングはutf8
    • chdirの引数や標準出力はcp932へ都度変換

表ディレクトリから出られない。
カレントディレクトリを表示するとおかしな表示になる。

但し、

use Win32::Unicode::Native;

を使ってchdirを上書きするとうまくいく。但し遅いらしい。
上書きした場合、cp932への変換は必要ない。

PHP

  • 前提条件
    • PHP 5.2.x
    • ソースエンコーディングはutf8
    • chdirの引数や標準出力はcp932へ都度変換

表ディレクトリから出られない。
カレントディレクトリを表示するとおかしな表示になる。

Ruby

  • 前提条件
    • ActiveRuby 1.8.7
    • ソースエンコーディングはutf8
    • chdirの引数や標準出力はcp932へ都度変換

問題なく動作する。

まとめ

  • 0x5c(バックスラッシュ)を含む文字について、ruby以外はデフォルトでうまく処理できていない
  • UTF16文字列を扱いたいならperlのWin32::Unicodeを利用する
    • cp932だけでいいならrubyのデフォルトで

参考