文字のデジタル表現|文字コード(ASCII・Unicode)と文字化けの仕組み
コンピュータは数しか扱えないので、文字も**番号(数値)に置き換えて記録しています。この「文字と番号の対応表」が文字コード**です。共通テストでは、文字コード表を読み取る問題や、文字の種類から必要なビット数を求める問題が出ます。
文字コードの考え方
文字コードは、一つひとつの文字に番号を割り当てたものです。例えば ASCII では、「A」は10進数の65(16進数の41、2進数の 01000001)です。
キーボードで「A」を押すと、コンピュータの中では 01000001 というビット列が記録されます。画面に表示するときは、その番号に対応する文字の形(フォント)を描きます。
ASCII(アスキー)
ASCII は、英字・数字・記号などを7ビットで表す文字コードです。7ビットなので、27 = 128種類の文字を表せます。実際のコンピュータでは、1バイト(8ビット)単位で扱います。
ASCIIの表は、16進数で「上位の桁(列)」と「下位の桁(行)」を組み合わせて読みます(一部を抜粋)。
| 下位\上位 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|
| 0 | (空白) | 0 | @ | P | ` | p |
| 1 | ! | 1 | A | Q | a | q |
| 2 | “ | 2 | B | R | b | r |
| 3 | # | 3 | C | S | c | s |
| 4 | $ | 4 | D | T | d | t |
- 「A」は上位4・下位1なので 41(16進数)
- 「a」は 61。大文字と小文字は 16進数で 20(10進数で32)違う
- 数字の「1」は 31。数値の1(01)とは別の番号です
表の規則性に気づくと、表にない文字の番号も推測できます。例えば「A」が41なら、「E」は4つ後の 45 です。
日本語の文字コード
日本語には、ひらがな・カタカナ・漢字など数千種類以上の文字があるので、1バイト(256種類)では足りません。そこで、2バイト以上を使う文字コードがあります。
| 文字コード | 特徴 |
|---|---|
| Shift_JIS | 日本語を2バイトで表す。古いWindowsのファイルなどで使われてきた |
| EUC-JP | 日本語を主に2バイトで表す。古いUNIX系のシステムで使われてきた |
| Unicode(UTF-8) | 世界中の文字を一つの体系で表す。UTF-8では英数字は1バイト、日本語の多くは3バイト。現在のWebの標準 |
必要なビット数の求め方
n ビットで表せる種類は 2n 通りです。表したい文字の種類以上になる最小の n を探します。
例: 7,000種類の文字に番号を付けるには、少なくとも何ビット必要か。
| ビット数 | 表せる種類 | 7,000以上か |
|---|---|---|
| 12 | 212 = 4,096 | × |
| 13 | 213 = 8,192 | ○ |
答えは 13ビットです。210 = 1,024 を覚えておくと、213 = 1,024 × 8 = 8,192 のようにすばやく計算できます。
文字化けが起きる理由
文字化けは、文字を保存したときと読み込むときで、違う文字コードを使ったために起きます。同じビット列でも、対応表が違えば別の文字として表示されてしまうからです。
例: UTF-8で保存した日本語の文章を Shift_JIS として開くと、UTF-8では1文字分の3バイトが、Shift_JISの別の文字の組合せとして読まれてしまい、意味の分からない漢字や記号が並びます。
対策は、ファイルを開くときに正しい文字コードを指定することです。Webページでは、HTMLの中で使っている文字コード(UTF-8など)を宣言します。
フォントの種類
文字の形のデータをフォントといいます。
| 種類 | 表し方 | 拡大したとき |
|---|---|---|
| ビットマップフォント | 文字の形を点(ドット)の集まりで表す | ギザギザになる |
| アウトラインフォント | 文字の輪郭を座標と曲線で表す | なめらかなまま |
画像のラスタ形式とベクタ形式の違いと同じ考え方です(「画像と音のデジタル化」)。
共通テストでの出題
- 文字コード表の読み取り:問題文に示された文字コード表から、文字の番号を求めたり、ビット列を文字に戻したりする問題。表の規則性(大文字と小文字の差など)を使うと速く解けます。
- 数え上げとビット数:2025年の本試験 第1問 問2 では、7セグメントLEDの点灯パターンが 27 = 128通りあることが問われました。「n 個の部品がそれぞれ2通り → 2n 通り」は、文字コードのビット数と同じ考え方です。
よくある間違い
- 「8ビットで表せる最大の数は256」:0〜255 なので最大は255。表せる種類が256通りです。
- 数字の文字と数値を混同する:文字の「1」は ASCII で 31(16進数)です。
- 「文字化けはファイルが壊れたから」:多くの場合、データは正しく、読み込むときの文字コードの指定が違うだけです。
まとめ
- 文字コードは、文字と番号の対応表。コンピュータは文字を番号(ビット列)で記録する
- ASCIIは7ビットで128種類。表の規則性を使えば番号を推測できる
- 日本語はShift_JISやUnicode(UTF-8)など、複数バイトの文字コードで表す
- 必要なビット数は、2n が文字の種類以上になる最小の n
- 文字化けは、保存時と読み込み時の文字コードの違いで起きる