読者です 読者をやめる 読者になる 読者になる

Shift_JIS 風 UTF-8 と CP932 風 UTF-8 の正規化

str.gsub!(/\xC2\xA2/, "\xEF\xBF\xA0")
str.gsub!(/\xC2\xA3/, "\xEF\xBF\xA1")
str.gsub!(/\xC2\xAC/, "\xEF\xBF\xA2")
str.gsub!(/\xC2\xA6/, "\xEF\xBF\xA4")
str.gsub!(/\xE2\x80\x94/, "\xE2\x80\x95")
str.gsub!(/\xE2\x80\x96/, "\xE2\x88\xA5")
str.gsub!(/\xE3\x80\x9C/, "\xEF\xBD\x9E")
str.gsub!(/\xE2\x88\x92/, "\xEF\xBC\x8D")

で正規化できます。

Ruby1.9 なら以下のように書いた方がベター。

str.tr("\u{301C 2016 2212 00A2 00A3 00AC 2014 00A6}",
  "\u{FF5E 2225 FF0D FFE0 FFE1 FFE2 2015 FFE4}")