Unicode
世界の文字を共通の符号位置で識別するための文字コード体系。文字の番号と、それをバイト列などで表す符号化方式を区別する必要がある。
イマシルちゃんの解説
世界中の文字に、共通の整理番号を付けると考えてみよう。
番号が同じでも、紙に書くか、荷札に分けて書くかで表し方は変わるね。
昔の小さな番号札では入りきらない番号も出てくるんだ。
そんなときのために、札の使い方も決められているんだよ。
この解説はわかりやすかったですか?
より深い解説
文字の番号と表現
符号位置はU+0041のように表す。これは番号であり、そのまますべてのファイルに同じバイト列で保存されるとは限らない。符号化方式によって実際の並びが変わる。
| 方式 | 符号単位 | 一つのUnicodeスカラー値の表現 |
|---|---|---|
| UTF-8 | 8ビット | 1~4個の符号単位 |
| UTF-16 | 16ビット | 1個又は2個の符号単位 |
| UTF-32 | 32ビット | 1個の符号単位 |
符号単位とは符号化を構成する基本の単位である。見た目の1文字が、常に一つの符号位置や一つの符号単位になるわけではない。
UCS-2と歴史的な問題
UCS-2は、基本多言語面の文字を固定長の16ビットで扱う古い方式である。ISO/IEC 10646とUnicodeは、文字の符号位置をそろえるように発展してきた。
平成20年度問55は当時の用語に基づく。選択肢の括弧書きだけから、「Unicode全体が常に16ビット固定長である」と理解してはならない。UCS-2は、基本多言語面の外側の文字を扱えない。
拡張された文字の表現
UTF-16では、U+10000以降の文字を、二つの符号単位の組で表す。この組をサロゲートペアという。UCS-2と、これを用いる方式は同じではない。
通常の文字として単独で扱わない予約範囲を使うことで、二つを組み合わせた表現を識別する。文字列の途中でこの組を分断すると、不正な列になりうる。
文字数と容量
| 数えるもの | 注意点 |
|---|---|
| バイト数 | 保存や通信に必要な容量である |
| 符号単位数 | 使用する方式によって変わる |
| 符号位置の数 | 結合文字などを別々に数える |
| 見た目の文字数 | 複数の符号位置が一つに見えることがある |
例えば結合文字を使った文字は、見た目が一つでも内部では複数の番号から構成される。入力文字数の制限と通信容量の制限を分けて設計する。
日本語の既存コードとの違い
JISコード、シフトJIS、EUCは、日本語の文字集合や符号化に関係する別の方式である。ファイルを誤った方式で読み出すと文字化けが起こる。変換では、変換先に表せない文字がないか、同じ見た目の文字が意図せず変わらないかを確認する。