###前提・実現したいこと
ruby単体で動作確認した処理をrailsでも動作するようにlibフォルダに移植しています。
最終的に所定のフォルダに所定のファイル名のyamlファイルを保存する処理になります。
###該当のソースコード
//今後出力ファイルに出力するyaml_fileに値をセットする
def setting_dates(inputdates)
yaml_file = {
'timestamp' => inputdates[0],
'value' => inputdates[1],
'color' => inputdates[2],
}
end
//yamlファイルを出力
def output_yaml_file
open('sample_output.yml', 'w') do |e|
YAML.dump(yaml_file , e)
end
end
//method_hogehogeにて、setting_datesメソッドの引数inputdatesにセットするデータを作成し、返す。
//method_hogehogeの処理の中身は割愛する
//配列inputdatesの各要素にはいずれも文字列が入ります。
inputdates = method_hogehoge
setting_dates(inputdates)
output_yaml_file
###発生している問題・エラーメッセージ
配列inputdatesに格納されているデータ(inputdates[0]/[1]/[2]各々)に日本語の文字列が一切含まれていなければ
エラーが発生する事なくsample_output.ymlが生成されます。生成されたymlの中身も狙い通りです。
ですが、データ(inputdates[0]/[1]/[2])のいずれかに日本語の文字列が含まれていれば
コマンドプロンプト上に
Encoding::UndefinedConversionError ("\xE3" from ASCII-8BIT to UTF-8):
が表示され、エラーとなります。YAML.dumpの箇所です。
###試したこと
上記output_yaml_fileメソッド内の
open('sample_output.yml', 'w') do |e|
を
open('sample_output.yml', 'wb')
にすると、日本語の文字列が含まれていても。
エラーが発生する事なくsample_output.ymlが生成されます。
sample_output.ymlをテキストエディタで開いても、中身は狙い通りの文字列が入っていました。
日本語の文字も文字化けはしていませんでした。
###確認したい事
Railsだと日本語文字列がバイナリ扱いされるなどの理由で今回の問題が発生していると考えているのですが、あっていますでしょうか?
あっている場合、対策を教えていただければ幸いです。
(試したことに記述したように"wb"でバイナリにすればyamlファイルは生成されるのですが、中身は本当に文字列だけのテキストなのでバイナリというのもなぁという感覚があります)
###補足情報(言語/FW/ツール等のバージョンなど)
OSはWindows7 64bit
Rubyは2.2.5
Railsは4.2.1
エディタはatomで文字コードはrubyではスタンダードのUTF-8にしています。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。