トップ «前の日記(2006-07-14 (Fri)) 最新 次の日記(2006-07-17 (Mon))» 編集   RSS 1.0 FEED  

Journal InTime


2006-07-15 (Sat) [長年日記]

_ [Rails] to_jsonのSafari対策

この間のコードだと、Safariで文字化けしてしまった。 やっぱり\u記法を使わないといけないようだ。

class String
  JSON_ESCAPED = {
     "\010" =>  '\b',
     "\f" =>    '\f',
     "\n" =>    '\n',
     "\r" =>    '\r',
     "\t" =>    '\t',
     '"' =>     '\"',
     '\\' =>    '\\\\'
  }

  def to_json
    return '"' + gsub(/[\010\f\n\r\t"\\]/) { |s|
      JSON_ESCAPED[s]
    }.gsub(/([\xC0-\xDF][\x80-\xBF]|
             [\xE0-\xEF][\x80-\xBF]{2}|
             [\xF0-\xF7][\x80-\xBF]{3})+/ux) { |s|
      s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/, '\\\\u\&')
    } + '"'
  end
end

もっと速く書ける?