UTF-8で処理するがファイルにはShift_JISで書く

メモ。

文字コード変換に限らず、ファイル書き出しの直前に、処理を挟み込む場合。

# encoding: utf-8
require "nkf"

# 特異メソッドを定義する方法
open("output1.txt","w") do |f|
  def f.write(str)
    super(NKF.nkf("-W --windows",str))
  end
  f.puts "あいうえお"
end

# サブクラスを定義する方法
class MyFile < File
  def write(str)
    super(NKF.nkf("-W --windows",str))
  end
end

MyFile.open("output2.txt","w") do |f|
  f.puts "あいうえお"
end

Ruby1.9だとopenのオプションでエンコードを指定できるのでこういうのは不要。