コンピュータが扱えるのは 0と1(2進数)だけ。
そのため「A = 65」「あ = 12354」のように、文字と数字を対応させた表 が必要です。
この対応表のことを 文字コード(文字符号)といいます。
異なる文字コードでやりとりすると 文字化け が起きます。
American Standard Code for Information Interchange の略。
7ビット(128文字) で表される、英語圏で作られた最も基本的な文字コードです。
現在のほぼすべての文字コードはASCIIと互換性があります。
| 文字 | 10進数 | 16進数 | 2進数(8bit表記) | ポイント |
|---|---|---|---|---|
| 0 | 48 | 30 | 0011 0000 | 数字の先頭。「1」は49、「9」は57 |
| A | 65 | 41 | 0100 0001 | 大文字の先頭。「B」は66、「Z」は90 |
| a | 97 | 61 | 0110 0001 | 小文字の先頭。「b」は98、「z」は122 |
| (スペース) | 32 | 20 | 0010 0000 | 印字できる文字の先頭 |
2進数では 6ビット目(25の位/左から3番目)が0か1か の違いだけ。
A = 0100 0001 → a = 0110 0001
コンピュータの世界では、この1ビットを切り替えるだけで「大文字と小文字の変換」が瞬時に行えるよう、最初から計算されてASCIIコードが配置されています。
2進数の 25の位 = 32(10)
文字列「n」(0〜9)のASCIIコードは 48 + n で計算できる。
例)文字列「5」= 48 + 5 = 53
Pythonでは、int(“5”) と書くだけで自動的に文字列から数値に変換されますが、その内部では、この 「48(文字列:0)を基準にして引き算・足し算をする」 という処理が行われています。
ASCIIの7ビットでは足りません。
そのため日本語専用の文字コードがいくつか作られました。
2バイトで日本語を表現。
メールなどで使われてきた。
エスケープシーケンスで英語↔日本語を切り替える。
英数字は1バイト、日本語は2バイト。
Windowsで長く使われてきた。
ファイルのやりとりで文字化けが起きやすかった。
日本語を2バイトで表現。
ASCIIと互換性あり(ASCII文字は1バイト)。
現在はUTF-8に置き換わり、ほぼ使われなくなった。
100万文字以上を収録しており、現在の国際標準となっている。
UTF-8、UTF-16などの符号化方式がある。
送り手と受け手で異なる文字コードを使っているときに発生します。
たとえばShift_JISで書かれたファイルをUTF-8として読もうとすると、対応する文字が違うためおかしな文字が表示されます。
送り手: 情報 ← Shift_JIS で保存
受け手: 豢€ 蝣ア ← UTF-8 として読んだら文字化け!
試験では「この文字列は何バイト?」という計算問題がよく出ます!
「情報」= 日本語2文字 × 2バイト = 4バイト
合計:5 + 4 = 9バイト
「情報」= 日本語2文字 × 3バイト = 6バイト
合計:5 + 6 = 11バイト
ASCII文字(英数字・記号):1バイト
ひらがな・カタカナ・漢字(日本語):3バイト
一部の特殊な漢字・絵文字:4バイト
(英字数 × 1) + (日本語数 × バイト数) で計算します。
どの文字コードかを必ず確認してから計算しましょう!
(英字1byte・日本語2byte)
(英字1byte・日本語3byte)
種類が違うと
文字化けが起きる
大文字+32=小文字
数字「0」=48
英字1byte
日本語3byte
・文字コードとは何か・なぜ必要かを説明できる
・ASCIIの特徴(7ビット・大小文字の差は32)がわかる
・文字化けの原因が説明できる
・UTF-8・Shift_JIS・Unicodeの違いと特徴がわかる
・文字コード別のバイト数計算ができる(英字1byte・日本語2or3byte)

