[Javascript]如何使用Javascript轉出UTF-8編碼字串

有關網頁及相關語法的討論
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

[Javascript]如何使用Javascript轉出UTF-8編碼字串

文章 tim »

先參考 UTF-8 及 Unicode 編碼方式的轉換. http://zh.wikipedia.org/wiki/UTF-8
由於在 browser 裡的 javascript 字串中, 處理字元的 String.fromCharCode 及 charCodeAt 函數都是使用 unicode , 所以了解了 unicode 及 utf-8 的對應關係後, 才能了解這組程式碼的功能, 對照表如下:
unicode-utf8.png
unicode-utf8.png (6.88 KiB) 已瀏覽 3412 次
(圖片引用自: http://zh.wikipedia.org/wiki/UTF-8)


程式碼如下: (僅處理4bytes以下的字元)

代碼: 選擇全部

function escape_utf8(data) {
    if (data == '' || data == null) {
        return '';
    }
    data = data.toString();
    var buffer = '';
    for (var i = 0; i < data.length; i++) {
        var c = data.charCodeAt(i);
        var bs = new Array();
        if (c > 0x10000) {
            // 4 bytes
            bs[0] = 0xF0 | ((c & 0x1C0000) >>> 18);
            bs[1] = 0x80 | ((c & 0x3F000) >>> 12);
            bs[2] = 0x80 | ((c & 0xFC0) >>> 6);
            bs[3] = 0x80 | (c & 0x3F);
        } else if (c > 0x800) {
            // 3 bytes
            bs[0] = 0xE0 | ((c & 0xF000) >>> 12);
            bs[1] = 0x80 | ((c & 0xFC0) >>> 6);
            bs[2] = 0x80 | (c & 0x3F);
        } else if (c > 0x80) {
            // 2 bytes
            bs[0] = 0xC0 | ((c & 0x7C0) >>> 6);
            bs[1] = 0x80 | (c & 0x3F);
        } else {
            // 1 byte
            bs[0] = c;
        }
        for (var j = 0; j < bs.length; j++) {
            var b = bs[j];
            var hex = nibble_to_hex((b & 0xF0) >>> 4) + nibble_to_hex(b & 0x0F);
            buffer += '%' + hex;
        }
    }
    return buffer;
}

function nibble_to_hex(nibble) {
    var chars = '0123456789ABCDEF';
    return chars.charAt(nibble);
}
(以上程式引用自: http://answers.oreilly.com/topic/657-ho ... avascript/)

若執行如下程式, 可以得正確的 utf-8 碼:

代碼: 選擇全部

document.write(escape_utf8("我"));
// %E6%88%91 
多多留言, 整理文章, 把經驗累積下來.....
回覆文章