Just do IT

思うは招く

テキストファイルのエンコーディングを変換して出力 Ruby基礎#27

お題

Shift_JISで「こんにちは」と書かれたテキストファイルを作り、そのテキストファイルを読み込んでUTF-8で出力するスクリプトを作れ。

「たのしいRuby 第6版 P.426」より

回答

File.write("bar.txt", "こんにちは", encoding: "Shift_JIS")

text = File.read("bar.txt", encoding: "Shift_JIS:UTF-8")
puts text
=> こんにちは

説明

File.writeメソッドでファイルを作成できる。第1引数にファイル名を指定、第2引数には文字列。そしてencodingを指定すると外部エンコーディングを設定できる。ここではまずShift_JISを指定。これでShift_JISというエンコーディングで「こんにちは」と書かれたテキストファイルができあがる。

次に、それを読み込む。 File.readメソッドでエンコーディングを指定する。 左は外部エンコーディング、右が内部エンコーディングとなる。

つまり、「外部エンコーディングShift_JISのテキストファイルを、UTF-8という内部エンコーディングで読み込め」という命令をしている。

学び

こう書くこともできた。

File.open("bar.txt", "w:Shift_JIS") do |f|
  f.write("こんにちは")
end

File.open("bar.txt", "r:Shift_JIS") do |f|
  str = f.read
  puts str.encode("UTF-8")
end

どちらもFile.openメソッドを使い、書き込みモード指定、エンコーディングShift_JIS。 読み出す方は最後にencodeメソッドでUTF-8に変えて出力。

参考:

qiita.com