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」みたいな(?)