From: KANAI-Takashi Date: 2008-07-01T00:21:40+09:00 Subject: [ruby-list:45169] Win/UTF8のFile.basename 金井と申します。 CGIのスクリプトを書いています。Fedora8では問題なかったのです が、Windowsで動かしてみてトラブルが発生しました。 アップロードされたファイルの名前を File.basename で取り出そう としたところで、変な結果が返ってくることがあります。 以下のように、その部分を切り出した実験をしてみました。 動作環境: Windows XP(SP3) ruby 1.8.6 (2008-06-20 patchlevel 230) [i386-mswin32] ruby 1.8.7 (2008-06-09 patchlevel 17) [i386-mswin32] ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] Shift-JISで作成したファイルを実行します。問題ありません。 ---------------------------------------------------------- #!/usr/bin/ruby -Ks s = "C:/Documents and Settings/kanai/デスクトップ/ABC.DEF" s = File.basename( s ) puts s ---------------------------------------------------------- D:\> ruby win_sjis.rb ABC.DEF UTF-8で作成したファイルを実行します。変です。 ---------------------------------------------------------- #!/usr/bin/ruby -Ku require 'nkf' s = "C:/Documents and Settings/kanai/デスクトップ/ABC.DEF" s = File.basename( s ) puts NKF.nkf( "-s", s ) ---------------------------------------------------------- D:\> ruby win_utf8.rb デスクトップ/ABC.DEF というわけで、 なぜ、こういう結果になるのかが分からなくて困っています。 試しに require 'jcode' を追加しても結果は同じでした。 参考までに、以下の環境で同様のことをしましたが、 問題ありませんでした。 Fedora8 ruby 1.8.6 (2008-06-20 patchlevel 230) [i386-linux] ---------------------------------------------------------- #!/usr/bin/ruby -Ku s = "C:/Documents and Settings/kanai/デスクトップ/ABC.DEF" s = File.basename( s ) puts s ---------------------------------------------------------- $ ruby linux_utf8.rb ABC.DEF ---------------------------------------------------------- #!/usr/bin/ruby -Ks require 'nkf' s = "C:/Documents and Settings/kanai/デスクトップ/ABC.DEF" s = File.basename( s ) puts NKF.nkf( "-w", s ) ---------------------------------------------------------- $ ruby linux_sjis.rb ABC.DEF よろしくお願いします。