• 締切済み

Ruby(on Windows) でUTF-8

Windows上でRuby使っています。 NetBeansで勉強していて、ファイルはすべてUTF-8で書くようにしています。 以下のコードのように、あるファイルを保存するプログラムを書いて、日本語ファイル名で保存したとき(この場合、ファイル名はUTF-8の文字列になるんですよね。)、 (1)と、(2)で同じファイル名の出力を期待しているんですが、名前が変わってしまいます。なぜでしょうか。 Windows上では、ファイル名はShift-JISなどに変換してから保存しないとうまくいかないのでしょうか。 saving_folder = "C:/testrubyfolder/" filename = "ユニコードです" puts filename #←(1) open(saving_folder + filename , "w"){|file| file << "test" } puts Dir.entries(saving_folder) #←(2)

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

Rubyが呼び出すCのライブラリ関数やWindowsAPIは UTF-8を処理できません。また、現状Unicodeを使用するAPIを呼び出すようには 実装されていないので、たとえば日本語WindowsであればShiftJISで データを渡さなければなりません。 自動変換はされないので、自分で行う必要があります。 質問にある例の場合、渡されたUTF-8のデータをそのままの形で ShiftJISで書かれたものとして処理してしまっているので、 ファイル名が変わっているように見えるのです。

jollymed
質問者

お礼

どうもあありがとうございます。 初めての質問だったので、回答してもらっているのに気づきませんでした。 すっきりしました。どうもありがとうございます

関連するQ&A