水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 2008年のえび日記 > 2008年1月 > 2008年1月29日(火曜日)

2008年1月29日(火曜日)

Unicodeエスケープのサロゲート対応版 (続き)

Kconv だと余計な正規化が入ったりするというご指摘をいただいたので (成瀬さんありがとうございます)、まじめにサロゲートペアを計算することにしました。こんな感じ。

def js_unicode_escape(text)
    text.unpack('U*').map{ |num|
        if(num < 0x10000)
            format('\\u%04x', num)
        else
            num -= 0x10000
            upper = num / 0x400 + 0xD800
            lower = num % 0x400 + 0xDC00
            format('\\u%04x\\u%04x', upper, lower)
        end
    }
end

ちなみに UTF-16 で表現できない文字のことは考慮していません。:-)

関連する話題: プログラミング / Ruby / JavaScript

最近の日記

関わった本など