【もじえんこーでぃんぐ】

文字エンコーディング とは?

最終更新:
💡 文字とバイトを対応させる「翻訳ルールブック」

文字列と、保存・送受信するバイト列とを対応させる規則。UTF-8やShift-JISなどがあり、書き出す側と読み取る側で規則が食い違うと文字化けの原因になる。

📌 このページのポイント
文字とバイト列の対応規則 文字 あ U+3042 UTF-8 E3 81 82 3バイト Shift-JIS 82 A0 2バイト バイト列は16進数で表記 読む側も同じ規則を使う
「あ」のコードポイントはU+3042。保存するバイト列は方式によって違う。番号・バイト数・見た目の文字数を区別する。
ひよこ ひよこ
文字エンコーディングって何のためにあるの?
ペンギン先生 ペンギン先生
文字列を保存したり送ったりするには、バイト列で表す必要があるよ。例えば「あ」はUTF-8なら16進数でE3 81 82という3バイト。受け取った側が同じ規則で読み取ると「あ」に戻せる。符号化と読み取りが対応していることが大事なんだ。
ひよこ ひよこ
UnicodeとUTF-8って同じなの?
ペンギン先生 ペンギン先生
Unicodeは文字を識別する番号などを定めていて、「あ」のコードポイントはU+3042だよ。UTF-8は、その番号をバイト列へ表す方式の一つ。U+3042という表記自体が保存時のバイト列ではないし、Unicodeを表す方式にはUTF-16などもあるんだ。
ひよこ ひよこ
UTF-8とShift-JISって何が違うの?
ペンギン先生 ペンギン先生
使える文字やバイトへの対応が違うよ。「あ」はUTF-8ならE3 81 82、Shift-JISなら82 A0。UTF-8は有効なUnicodeコードポイント1個を1〜4バイトで表す。見た目の1文字が複数のコードポイントから成る場合もあるので、見た目1文字が必ず4バイト以内とは限らないよ。
ひよこ ひよこ
文字化けはどうして起きるの?
ペンギン先生 ペンギン先生
UTF-8で書いたバイト列をShift-JISとして読むなど、書く側と読む側の規則が違うと、別の文字になったりエラーになったりするよ。元のバイト列が残っていれば正しく読み直せる場合があるけど、代替文字に置き換えて保存した後などは元に戻せるとは限らないんだ。
ひよこ ひよこ
文字化けを防ぐにはどうすればいいの?
ペンギン先生 ペンギン先生
新しいWebの仕組みではUTF-8を使い、実際の保存形式と読み取る設定、通信で知らせる文字コードを合わせよう。名前をUTF-8に変更するだけではバイト列は変わらない。別方式のデータは元の方式で読み取ってから必要な方式へ書き出し、データが欠けたり変わったりしていないかも確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「文字エンコーディング」って出てきたら「文字列とバイト列を対応させるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Character Encoding」 = 文字符号化
💬 Encode(エンコード)は「符号化する・変換する」という意味で、文字という概念をコンピュータが扱えるデジタルデータに変換することを指すよ

参考資料

← 用語集にもどる