hi-nakamura
8/7/2014 - 11:54 PM

utf-8からWindows-31Jにエンコード

utf-8からWindows-31Jにエンコード

Encoder.encode_windows31j('xxx')
module Encoder
  # Windows-31Jにエンコード
  def self.encode_windows31j(str)
    str.gsub!(REPLACE_KEYS, CONVERSIONS)
    str.encode('Windows-31J')
  end

  private

  CONVERSIONS = {
    "\u301c" => "\uff5e", # wave-dash
    "\u2212" => "\uff0d", # full-width minus
    "\u00a2" => "\uffe0", # cent sign
    "\u00a3" => "\uffe1", # pound sign
    "\u00ac" => "\uffe2", # not sign
    "\u2014" => "\u2015", # full-width dash
    "\u2016" => "\u2225"  # double vertical line
  }
  REPLACE_KEYS = /[#{CONVERSIONS.keys.join}]/
end