JavaScript/String/fromCharCode

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

fromCharCodeメソッドは0x41, 0x42, 0x43のような文字コード列を "ABC" のような文字列に変換して返します。このメソッドはECMA-262第1版で規定され、JavaScript 1.2で実装されました。JavaScript 1.3以降は引数をISO/IEC 8859-1のバイト表現ではなく、Unicodeのバイト表現として扱うように変更されています。逆に "A" のような文字を0x41のような文字コードに変換するには、String.prototype.charCodeAtメソッドを使用します。

構文[編集]

var string = String.fromCharCode( number0, number1, ..., numberN );

引数[編集]

number0, number1, ..., numberN
Unicodeの文字コード値のリスト(0x0以上0xFFFF未満)

[編集]

var string = String.fromCharCode( 0x41, 0x42, 0x43 );
alert(string); // "ABC"

解説[編集]

fromCharCodeメソッドはUnicodeの文字コード(バイト表現)の数値のリストを受け取り、それらを文字に変換して連結した文字列を返します。これは文字列リテラルのUnicodeエスケープシーケンスと同じ働きをします。たとえば、"\u3000"String.fromCharCode(0x3000)は等価です(さらに "\x41"String.fromCharCode(0x41)と等価)。fromCharCodeメソッドはStringオブジェクトの静的なメソッドであり、Stringオブジェクトのインスタンスには継承されないので、必ずString.fromCharCodeという形で呼び出す必要があります。

たとえば "A" から "Z" までのラテン文字を要素に持つ配列は、次のようにfromCharCodeメソッドを使用して生成することができます。

var array = [];
for ( var c = 'A'; c <= 'Z';
      array.push(c), c = String.fromCharCode( c.charCodeAt(0) + 1 ) );
alert(array); // ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

または

var array = [];
for ( var i = 0, a = 'A'.charCodeAt(0); i < 26;
      array.push( String.fromCharCode( a + i++ ) ) );
alert(array); // ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

fromCharCodeメソッドはECMAScriptの仕様上および多くのJavaScriptの処理系の実装では、0x10000 == 65536以上の文字コードの値(サロゲートペア)には対応していません('\0' が返されます)。これはUnicodeエスケープ文字やその他の文字列を扱うメソッドでも同様です。fromCharCodeメソッドでサロゲートペアの文字コードを扱うには、次のような非標準の拡張を使用します。

String.__fromCharCode__ = String.fromCharCode;
String.fromCharCode = function(){
    var buf = '';
    for ( var i = 0, l = arguments.length; i < l; i++ ) {
        var n = arguments[i];
        if ( n < 0x10000 ) {
            buf += String.__fromCharCode__(n);
            continue;
        }
        n -= 0x10000;
        buf += String.__fromCharCode__(
            0xD800 + ( n >> 10 ),
            0xDC00 + ( n & 0x3FF )
        );
    }
    return buf;
};

String.fromCharCode(0x10000)  == '\uD800\uDC00'; // true
String.fromCharCode(0x10FFFF) == '\uDBFF\uDFFF'; // true

関連項目[編集]

このページ「JavaScript/String/fromCharCode」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。