サイトマップ

JavaScriptコードスニペット:文字列<=>UTF-8バイト配列の変換

文字列をUTF-8のバイト配列に変換する

JavaScriptの文字列は内部的にはUCS-2の2バイトで表現されるため、そのまま文字単位に切り出したものをURLパラメータの%形式などに変換しても、他では使えません。なので、一旦UTF-8に変換してから処理を行う必要があります。

このプログラムでは、文字列を1バイトづつの配列に変換します。

【サンプル】

(function(text) {
    var result = [];
    if (text == null)
        return result;
    for (var i = 0; i < text.length; i++) {
        var c = text.charCodeAt(i);
        if (c <= 0x7f) {
            result.push(c);
        } else if (c <= 0x07ff) {
            result.push(((c >> 6) & 0x1F) | 0xC0);
            result.push((c & 0x3F) | 0x80);
        } else {
            result.push(((c >> 12) & 0x0F) | 0xE0);
            result.push(((c >> 6) & 0x3F) | 0x80);
            result.push((c & 0x3F) | 0x80);
        }
    }
    return result;
})('今日はいい天気です');

【サンプルの実行】クリックしてください

UTF-8のバイト配列を文字列に変換する

今度は、上記で生成したバイト配列を元の文字列に戻します。

【サンプル】

(function(arr) {
    if (arr == null)
        return null;
    var result = "";
    var i;
    while (i = arr.shift()) {
        if (i <= 0x7f) {
            result += String.fromCharCode(i);
        } else if (i <= 0xdf) {
            var c = ((i&0x1f)<<6);
            c += arr.shift()&0x3f;
            result += String.fromCharCode(c);
        } else if (i <= 0xe0) {
            var c = ((arr.shift()&0x1f)<<6)|0x0800;
            c += arr.shift()&0x3f;
            result += String.fromCharCode(c);
        } else {
            var c = ((i&0x0f)<<12);
            c += (arr.shift()&0x3f)<<6;
            c += arr.shift() & 0x3f;
            result += String.fromCharCode(c);
        }
    }
    return result;
})([228, 187, 138, 230, 151, 165, 227, 129, 175, 227, 129, 132, 227, 129, 132, 229,
 164, 169, 230, 176, 151, 227, 129, 167, 227, 129, 153]);

【サンプルの実行】クリックしてください

JavaScriptコードスニペット

 
research/1308637883.txt · 最終更新: 2011/07/08 18:06 by Kazuyuki Matsuda
特に明示されていない限り、本サイトの内容は次のライセンスに従います:Copyright(C) 2011 Shorindo, Inc. All Rights Reserved
Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki