2008年7月 1日

[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

よろしくお願いします。

投稿者 xml-rpc : 2008年7月 1日 00:21
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/74825
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。