全角ハイフンとの戦い
恐らく --no-locale オプションをつけ忘れたせいで PostgreSQL でどうしても全角ハイフンがうまく扱えなかったので、かっとなって変換モジュールを書いてみました。対象となる文字を、別の文字へ変更します。なお、文字コードは UTF-8 を使う前提で記述しています。
#coding:utf-8 module ConvertChar require 'uri' def convert(str, before, after) str = URI.encode(str) buf = "" # 全角の文字列を探して、3バイト毎に文字列を分割 while index = (str =~ /((?:\%[A-F0-9][A-F0-9]){3})/) substr = $1 # 半角の文字が挟まる場合、そのままバッファに追加 if 0 < index buf << str[0, index] end # ここで文字を変換してバッファに追加 buf << URI.decode(substr.gsub(URI.encode(before), after)) # 元の文字列から追加が終わった部分を削除 new_index = index + substr.length str = str[new_index, str.length - new_index] end # buf が空の時は何もする必要がない return buf.length > 0 ? buf : str end end
マジックコメントはつけてますが、動作確認は Ruby 1.8.7 で行いました。多分平気だと思うけど、バグってたら報告ください。多分直します。