【文字コード】入門

文字コード(Character Code)

 文字や記号をコンピュータ上でデータとして扱うために、1文字ずつ固有のビット列(0と1)を与えた符号のこと
 通常、7ビット(128通り)または8ビット(256通り)を最小単位とする。

文字集合

文字コードを定義するためには、言語と対象の文字に対して列挙した文字集合を定める必要がある。
このとき、
  • 文字群:レパートリ
  • 一意の番号を与えたもの:符号化文字集合
と言い、各文字に与えられた番号を「符号位置(code point)」と言う。
代表的な符号化文字集合はJIS X 0201、JIS X 0208、Unicodeなど

Unicode

当初は16ビット(65536通り)であったが、21ビット弱(1114112:U+0000~U+10FFFFF)まで拡張された。
符号位置は4桁以上の16進数(例」U+20B9F)で、6桁の16進数で表したとき、最初の2桁を「面(00面~ff面)」、次の2桁を「区(00区~ff区)」、最後の2桁を「点(00点~ff点)」と呼ぶ
基本は「1文字=2バイト」だが、1部の文字は「1文字=4バイト」(サロゲートペア)
従来のUnicodeでは未使用だった0xD800~0xDBEF(1024通り)を上位サロゲート、0xDC00~0xDFFF(1024通り)を下位サロゲートとして、「上位サロゲート+下位サロゲート」の4バイトで文字を表現
例)ǹ
ベースとなる「n」の直後に合成用の「'」と付ける

符号化方式

文字数が少ない欧米圏では8ビット文字のように符号化文字集合をそのまま文字コードとする場合もあるが、 日本語等の文字数が多い場合は、符号をどのようにビット列で表現するかを定めている場合があり、これが文字エンコーディング(符号化方式)である。
JIS, Shift JIS, UTF-8, UTF-16, UTF-32

UTF-16

16bitの符号なし整数値によってUnicodeのコードポイントを表現するエンコード方式

UTF-32

32bitの符号なし整数値によってUnicodeのコードポイントを表現するエンコード方式
Unicodeの有効ビット数は21ビット弱なので、変換は不要で上位ビットを0埋めすれば良い
バイト列の変換については、ビッグエンディアンがデフォルトで、データの先頭にエンディアンを指定する「バイト順マーク」がつくことがある。
  • ビッグエンディアン:00 00 FE FF
  • スモールエンディアン:FF FE 00 00

UTF-8

最も後発の文字エンコードで、8bitを1単位として、1~4単位までの連続した単位列によって、Unicodeの1コードポイントを表現
1単位だけで、コードポイントを表現するときは、下位7bitはASCIIと等しく、ASCIIを使っていたコードやシステムと親和性が高く、最も普及しているエンコード