UTF-8について

Webサーバのログとか、AJAXの内容とかでは、日本語や記号をUTF-8でエンコードされた形、あるいはUTF-8のコード表記で見ることが多くなってきたわけですが・・・

 

例えば「ポ」という文字は・・・

 

\u30ddという「コード」がマッピングされている。

 

これは、UTF-8における「その文字のコード」であり、UTF-8でエンコードしたものではない。

 

実際にこれらのコードでエンコードするには、他に追加すべき情報がある。

 

このコードを2進数にすると次のようになる。

 3 0 d d => 0011 0000 1101 1101

 

これを次のようにゴニョゴニョする。

=---- : 「1」の個数(=バイト数)+「0」
     ---- : 1バイト目
         =-- : 「10」バイトの区切り
            ------ : 2バイト目
                  =-- : 「10」バイトの区切り
                     ------ : 3バイト目
     ----   ------   ------ : この領域に「30dd」を入れると次のようになる。
=11100011=10000011=10011101 : これを16進にすると次のようになる。
=E3=83=9D : UTF-8エンコード完了

 

nkf(ファイルのエンコードをゴニョゴニョする)コマンドで確認する。

echo "ポ"|nkf -wMQ

=E3=83=9D

 

逆に言うと、nkfでは、実際のどの文字がどのコードにマッピングされているか直接的には分からない。

 

コード<==>文字の変換には、JavaScriptがお手軽でいい。

### コード→文字の変換

 -  サーバでnode.jsとか入っていれば、

    node -e "console.log(unescape('\u30dd'.replace(/\\\\u/g, '%u')))"

 -  あるいは、Google Chrome のデベロッパーツールのコンソールで、

    console.log(unescape('\u30dd'.replace(/\\u/g, '%u')))

### 文字→コードの変換

* replaceの位置が変わっていることに注意 *

 -  サーバでnode.jsとか入っていれば、

    node -e "console.log(escape('ポ').replace(/%u/g, '\\\\u'))"

 -  あるいは、Google Chrome のデベロッパーツールのコンソールで、

    console.log(escape('ポ').replace(/%u/g, '\\u'))

 

JavaScriptでエンコードするには、encodeURI, encodeURIComponentを使う。

 

ハ長調だと「ラ」の音は、「A」っていうコードだけど、実際は「440Hz」みたいな(?)