コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

UnicodeにおけるU+から始まる文字列はUnicodeの表現で、そのままUTF-8の表現で使えるものではない。

理解がぼんやりしていたので書いてまとめてみる

コードポイントとは

プログラム上で文字列を扱うためのマッピング情報、わかりやすい説明があったので引用すると以下

まずは基本中の基本だけど、(現在のところ)コンピュータが扱えるのは数値のみという大前提がある。 何をするにも数値をいじるしかない。 きれいなCGも、優雅な音楽も、つまるところ数値なわけだ。 「ここに100を書き込んで、ここに150を書き込んで…」と、コンピュータが必死になっていろんなところに数値を書き込んだ結果としてCGが表示されたり音楽が流れたりするわけ。

そんなわけだから、当然コンピュータ内で文字を表現するにも数値が必要で、あらかじめ「この文字はこの数値で表す」という取り決めをする必要があるんだ。 その取り決め(文字⇔数値の対応)のことを文字コード、1つ1つの文字に割り当てられた数値のことをコードポイントと呼んでいる。 - Unicodeについて

Unicodeのコードポイントとは

Wikipediaに記述が的確なので引用すると

Unicode符号位置を文章中などに記す場合などは "U+" の後に十六進法でその値を続けることで表す。 - Unicode - Wikipedia

よくある勘違い

UTF-8は16進数表現で記述されることがある、たとえばひらがなの「あ」は 0xe38182 という形で16進数表記を表す 0x と 内容を表す16進数表記が入る。

Unicodeでは「あ」は U+3042 なので16進数表記の部分で比べても 3042xe38182 では差がある。

詳細の話は割愛するが、UTF-8Unicodeの作りがかなり大きく容量をとるから省エネ化をする仕様となっており、そのため16進数表記が異なる。なお補足までUTF-16Unicodeのコードポイントに近い形の仕様になっているのでUTF-16での「あ」は 0x3042 であったりする。(Unicodeに拡張がなされているものなので完全に同一ではない。)

参考