2010年4月9日金曜日

unicodeの10進数表記

サンプルコードの丸写しは著作権違反だと分かってはいるものの、どうにも理解できないことがあったので、一部文字を変えて抜粋し転載。
charCodeAt()で文字をUnicodeに変換し、String.fromCharCode()でUnicodeを文字に変換するのですが
var str = "Q!ADあイウエオ";
var c = str.charCodeAt(1); // 2 番目の文字を変換
alert(c);
var result = String.fromCharCode(c);
alert(result);


↑このようなアラートがOKを押すと連続して表示されるのだが、このScriptは「!」をunicode番号で表示し、そのunicode番号を文字にするというスクリプトだよな。「!」のunicodeは0x0021。0x0033は「3」になる。これが理解できなくてググりました(^^;A


■ 文字と文字コードの変換
◆ string.charCodeAt(n) (e4/N4)
string の n 番目(最初の文字を0番目とする)の文字のコードを返します。ブラウザの種類やバージョンによって文字数の数え方や、文字コードの扱いが異なるので注意が必要です。例えば以下の例(コードはシフトJISと仮定)で、Netscape Communicator 4.01 では "あ" のシフトJISコードの1バイト目 "\x82" を示す -126 を返しますが、Internet Explorer 4.0 や Netscape Communicator 4.06 以降では Unicode の "\u3042" を示す 12354 を返します。
スクリプトをc = str.charCodeAt(4);に書き換えるとこの例にマッチします。
はい、「12354」は10進数表記でunicodeは16進数表記で「3042」なのですね(大恥
なので、21は10進数で33なのね。
こういった注意書きがPDF本にないだけに入門者は苦しむのです。

最初、分からない状態でこの日記を書きはじめました。書きながら調べてようやく理解できた次第です。
16進数変換・文字コードサイトを利用させていただきました。
2進数、8進数、10進数、16進数相互変換サイトもお薦めです。
このサイトの非常にいいところは8進数表記もありますので、あぷらいとさんの名著「aiデータ解析」を理解するのに役立ちます。
まだ読んでない方はどぞ~^^

0 件のコメント: