金井と申します。
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
よろしくお願いします。
投稿者 xml-rpc : 2008年7月 1日 00:21