続・Ruby で UTF-8 の文字を Shift JIS の文字に変換する

以前に書いた記事の別解です。

結論

String クラスに以下のように sjisable メソッドを生やします。

class String
  def sjisable
    str = self

    from_chr = "\u{301C 2212 00A2 00A3 00AC 2013 2014 2016 203E 00A0 00F8 203A}"
    to_chr   = "\u{FF5E FF0D FFE0 FFE1 FFE2 FF0D 2015 2225 FFE3 0020 03A6 3009}"
    str.tr!(from_chr, to_chr)

    str.encode('Windows-31J', 'UTF-8', invalid: :replace, undef: :replace)
  end
end

あとは String のオブジェクト(要は文字列)にこのメソッドを適用すれば、戻り値が Shift JIS になります。Encoding::UndefinedConversionError も出ません。

以前に書いた記事に比べて、こちらの方が少し見通しがよいかなと思います。

参考(というか答え、大感謝)

Powered by はてなブログ