Monday, November 30, 2009

Ruby1.9 encoding

SinatraがRuby1.9に対応したので早々UPGrade
しかし1.9のエンコードがうまくいかない
原因はRackのParamsからのリターンがASCII-8BITになってしまうため

Patent.rbではファイルストリングがUTF-8か判断して
そうでないときはSJISと解釈してforce_encodingし
さらにUTF-8にencodeし
一方でUTF-8の時はUTF-8にforce_encodingする

    def conv_to_utf8_string(filename)
        str = IO.read(filename) rescue filename
        if str.utf8?
            # should force encoding: Rack bug which params badly return ASCII-8BIT
            str.force_encoding('UTF-8')
        else
            str.force_encoding('SJIS').encode('UTF-8').gsub("\r", "")
        end
    end

No comments: