文字コードと文字のデジタル表現
指導者向けの公開補足
学習本文に加えて、指導の視点・背景・授業での確かめ方を示します。どなたでも読めます。
指導の焦点
文字・文字コード・符号化方式・フォントを分ける。「Unicodeなら必ず1文字2バイト」という理解を避ける。
一歩踏み込んだ背景
UTF-8などは符号位置をバイト列へ表す方式である。また、見た目の一文字が複数の符号位置から成る場合があり、文字数の数え方も目的で変わる。
授業での確かめ方
同じ文章を保存するときの文字コードの設定とファイルサイズを比較する。絵文字なども題材にする場合は、表示環境による差を記録し、文字化けと区別する。
制度・規格等は本文末尾の参考資料も確認してください。
この単元でできるようになること
Section titled “この単元でできるようになること”- 文字を番号やバイト列に対応させる必要性を説明できる。
- 文字集合、符号位置、符号化方式、フォントを区別できる。
- 文字数とデータ量が単純には一致しない理由を説明できる。
ビット列には、読む約束が必要
Section titled “ビット列には、読む約束が必要”コンピュータは、画面の文字の形そのものだけを保存して文章を扱っているわけではない。文字に符号を対応させ、その符号をバイト列として保存する。読む側が同じ約束を使えば、元の文字として解釈できる。
八ビットの並びだけを見ても、それが文字、画像の色、数値のどれかは決まらない。文章として読む場合も、どの文字コードの約束かが必要だ。送る側と受け取る側の解釈が違うと、意図しない文字になる文字化けが起こり得る。
番号を決めることと、保存することを分ける
Section titled “番号を決めることと、保存することを分ける”Unicodeは、多くの言語の文字などに共通の符号位置を割り当てる標準だ。符号位置は「U+」に続く16進数などで表す。一方、UTF-8はUnicodeの符号位置をバイト列に符号化する方式の一つである。UnicodeとUTF-8は、同じ階層の名前ではない。
| 観点 | 役割 | 例 |
|---|---|---|
| 文字 | 区別して扱いたい記号 | ラテン文字のA |
| 符号位置 | Unicode上の番号 | U+0041 |
| 符号化方式 | 番号をバイト列にする約束 | UTF-8 |
| フォント | 画面に描く字形を提供する | 太さや形の異なる書体 |
同じ文字が別の形に見えても、フォントだけが違う場合がある。逆に見た目が似ていても、別の符号位置の文字の場合がある。見た目だけで同じデータと判断しない。
架空の札の名前で、容量を計算する
Section titled “架空の札の名前で、容量を計算する”札に「A森」と書き、その二文字だけをUTF-8で保存するとする。Aは一バイト、森は三バイトなので、文字データ部分は合計四バイト、三十二ビットになる。ここでは改行、ファイルの追加情報などを含めない。
「二文字だから二バイト」とは限らない。UTF-8は符号位置に応じて一から四バイトを使う可変長の方式だ。日本語の多くの文字が三バイトで表されるが、全ての日本語文字が必ず三バイトというわけではない。
さらに、見た目の一文字が複数の符号位置から構成される場合がある。濁点を組み合わせる表現や、複数の符号からできた絵文字などだ。文字数制限の「一文字」が何を数えるかは、サービスによって確認が必要になる。
文字化けと、表示できない文字は別の場合がある
Section titled “文字化けと、表示できない文字は別の場合がある”文字化けは、保存したバイト列を異なる方式で解釈することなどで起こる。編集ソフトで開く方式を確認し、元ファイルを残してから変換する。誤った表示のまま上書きすると、元の情報を失って修復が難しくなる場合がある。
四角形などが表示される場合は、文字の解釈は合っていても、対応する字形がフォントにない可能性がある。使用するフォントや環境も調べよう。文書を画像にすれば見た目を固定しやすいが、検索や読み上げ、文字の再利用は難しくなることがある。
他の環境で読めるかを確かめる
Section titled “他の環境で読めるかを確かめる”提出前には、別の端末でも開けるか、氏名などの文字が欠けていないかを確認する。ファイル交換では符号化方式を明示し、形式や改行の違いも考える。入力フォームでは全角・半角や空白の違いによって一致判定が変わる場合もある。
文字の統一処理は便利だが、本人の名前や記号を意図せず変えない注意も必要だ。機械の扱いやすさと、正しい表記の両方を確かめる。
| 用語 | 意味 |
|---|---|
| 符号位置 | 文字などに割り当てられた番号 |
| Unicode | 多様な文字を共通に扱うための標準 |
| UTF-8 | Unicodeを可変長のバイト列で表す方式 |
| フォント | 文字の字形を描くためのデータ |
- UnicodeとUTF-8の違いを、番号と保存方法の関係から説明しよう。
- UTF-8で「B森B」を保存する。文字データ部分のバイト数とビット数を求めよう。
- ある文字だけ四角形になった。符号化方式以外に何を調べるか考えよう。
問1の解答例を見る
Unicodeは文字に符号位置という番号を割り当てる体系であり、UTF-8はその符号位置をバイト列として表す符号化方式の一つである。
問2の解答例を見る
5 B=40 bit。UTF-8ではBが各1 B、森が3 Bなので、1+3+1=5 Bとなる。文字データ以外の管理情報は含めない。
問3の解答例を見る
その文字を表示する字形がフォントにあるか、代替フォントが使えるか、アプリが対応しているかを調べる。文字の番号を正しく読み取れても、字形がなければ表示できないことがある。
文字の番号、バイト列への変換、字形の表示は役割が異なる。文字数と容量を混同せず、交換相手の環境でも正しく読めるかを確認しよう。