###前提・実現したいこと
ruby 1.9.3を使用して
・Excelファイルをreadする(openofficeとかではなく、MicrosoftExcelです)
・readしたExcelファイルには各シート毎にデータが格納されているので、所定のテキストフォーマットに整形
・整形したデータをcsvファイルに書き出す
rubyソースの管理をしています。 rubyの実行OSはWindows7です。
ruby1.9.3で動作保証ができているものの、ruby1.9系はすでにEOLを迎えていますし、今回2.2.4を入れました。
しかし、rubyを2.2.4にあげてrubyを実行すると下記のようなエラーが出ました。
###発生している問題・エラーメッセージ
48:in `write': U+03E8 from UTF-8 to Windows-31J (Encoding::UndefinedConversionError)
###該当のソースコード
def create_output_file(xlsx, fileName, modelName)
//ディレクトリパスを設定
dir = "config\#{modelName}\gui"
//ディレクトリがなければ作成する
FileUtils.mkdir_p(dir) unless FileTest.exist?(dir)
//ファイルを書き込み用で開く
io = File.open("#{dir}\#{fileName}", "w:SJIS:UTF-8");
return io
end
//読み出し用のxlsxファイルの読み出しはrooライブラリを使用。
//エクセルファイルを取得
xlsx = Roo::Excelx.new(name)
//CSVファイルに出力するメソッド
def output_csv_file(io, output)
if output.empty? == false then
//ファイルに出力する
io.puts(output) <--------エラーの48行目。ここで指摘されている
puts(output) //コンソールにも出力する
output.clear
end
end
###試したこと
エラーで指摘されている48行目の
io.puts(output)
を
io.puts(output.encode(Encoding::Windows_31J, undef: :replace))
にするとエラーは解消されたが、
生成されたCSVファイルの中身を確認するとruby1.9.3でコンパイルしたものと
まるっきり別物でした。i.e Not期待値
###確認したい事は下記2点です
1点目;
ruby1.9.3とruby2.2系で文字コードに関する部分の処理で
ガードが厳しくなるような仕様変更が入ったのかを確認したい
2点目:
ruby2.2系で上記のEncoding::UndefinedConversionErrorを回避するには、どこをいじればよいか?
Excel/CSVを扱う上での宿命といえば宿命なんでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/27 13:47