2008年06月12日 02:00 [Edit]

この記事をクリップ! newsing it! Buzzurlにブックマーク b.hatena.ne.jp/entry javascript - 文字を確実に表示する

Lingua::CJKV::Simplify で簡単繁盛」のような、日本語以外の文字も使うプログラムでちょくちょく来るクレームが、「表示できません」というもの。

これを解決してみました。



<BR> on LF

種明かしは、こちら。

(function(){
    var str2unicode = function(str){
        var uni = [];
        for(var i = 0, l = str.length; i < l; i++){
            var ord = str.charCodeAt(i);
            if (0xD800 <= ord && ord < 0xDC00){ // surrogate pair
                ord = 0x10000 + (ord - 0xD800) * 0x400 
                    + (str.charCodeAt(++i) - 0xDC00);
            }
            uni[uni.length] = ord;
        }
        return uni;
    };
    var base_uri = 'http://www.unicode.org/cgi-bin/refglyph?24-';
    var $E = function(tag){ return document.createElement(tag) };
    render_glyph = function(str, dom, lf2br){
        dom.innerHTML = '';
        var uni = str2unicode(str);
        for (var i = 0, l = uni.length; i < l; i++){
            var hex = uni[i].toString(16);
            var img  = $E('img');
            img.alt = img.title = 'U+' + hex;
            img.src = base_uri + hex;
            dom.appendChild(img);
            if (lf2br && uni[i] == 10) dom.appendChild($E('br'));
        }
    }
})();

見ての通り、

のglyph表示をそのまま使っています。

#Unicode.orgに怒られちゃうかな...その時はその時。

工夫のしどころは、Surrogate Pairの扱いぐらいですかね。

Enjoy!

Dan the JavaScripting Unicoder

See Also:


この記事へのトラックバックURL

この記事へのソーシャルブックマーク
はてなブックマーク
Livedoorクリップ
0 Buzzurl