CE101
文字コードを図と演習で理解する
CSV を Excel で開いたら「縺薙s縺ォ縺。縺ッ」。メールの件名が記号の羅列。データベースに入れた名前が「????」— 文字化けは毎度おなじみなのに、原因を説明しろと言われると意外と難しいものです。この講座では対処法の丸暗記ではなく、化けた画面を見たら「どの符号化で書かれたバイト列を、どの符号化として読んでしまったのか」を自分で推理できるようになることを目指します。図で仕組みをつかみ、UTF-8 のバイト列を手で組み立て、最後は実務風の文字化けケースを推理して仕上げる構成です。
図 → 番号 → バイト列 → 推理
全 43 問
ブラウザ内採点
localStorage 保存
所要
3〜4 時間
問題数
全 43 問
形式
7 章 + 小問 + シミュレータ
費用
無料
ファイルの実体はバイト列だけで、「何の符号化か」の札は付いていません。同じバイト列でも読み方が違えば別の文字に見える — この 1 枚が講座全体の出発点です。
この講座の特徴
本文のすぐ下に小問
読んだ直後に 1〜3 問ずつ解く構成なので、「分かったつもり」のまま先へ進みにくくなっています。
UTF-8 を手で組み立てる
「あ」U+3042 が E3 81 82 の 3 バイトになるまでを、ビットの流し込みとして自分の手で計算します。
バイト列シミュレータ
第 3 章のシミュレータに好きな文字列を入れると、コードポイント・UTF-8 のバイト列・UTF-16 のコード単位、さらに「Shift_JIS として誤読した姿」まで目で確かめられます。
ブラウザ内採点・登録不要
全 43 問はブラウザ内で採点され、結果はお使いのブラウザの localStorage にだけ保存されます。サーバには何も送信しません。
この講座を貫く 1 つの見方
文字はコンピュータの中では、常に 2 段階で扱われます。この 2 段階を分けて考えられるようになることが、この講座のすべてです。
第 1 段階: 番号(コードポイント)
文字集合が、どの文字に何番を振るかを決める。Unicode では「あ」= U+3042。(第 2 章)
第 2 段階: バイト列(符号化)
符号化が、その番号をどうバイト列にするかを決める。UTF-8 なら U+3042 → E3 81 82。(第 3〜5 章)
化けたときの型
ファイルにはどの符号化かの札が付いていないので、「書いた符号化」と「読んだ符号化」がズレると別の文字に見える。(第 1・6・7 章)
この講座の合言葉: 文字化けを見たら、そこで思考を止めずに問いかけてください — どの符号化で書かれたバイト列を、どの符号化として読んでしまったのか?
章構成
1 導入 — 文字化けはなぜ起きるか
5 問。ファイルの実体はバイト列だけであること、同じバイト列が読み方で別の文字になること、文字集合と符号化の区別を押さえます。
2 ASCII から Unicode へ — 文字に番号を振る
6 問。7 ビットの ASCII から、日本語文字集合の乱立を経て、世界中の文字に一意の番号を振る Unicode まで。U+XXXX 表記の読み方も練習します。
3 UTF-8 を手で組み立てる
6 問。可変長の規則を学び、U+3042 を実際に E3 81 82 へ手計算します。ASCII 互換が効く理由と BOM、シミュレータ付き。
4 Shift_JIS と日本語の事情 — ダメ文字と CP932
6 問。2 バイト目が ASCII 領域に食い込む構造から「ダメ文字」問題を導き、半角カナ・CP932・今も現役の理由まで。
5 UTF-16 とサロゲートペア — 文字数の落とし穴
6 問。「𠮷」や絵文字が 2 コード単位になる仕組みを追い、length が見た目の文字数と一致しない理由を計算で確かめます。
6 実務の落とし穴 — 宣言と実体を一致させる
6 問。charset 宣言と実体の不一致、Excel と BOM 付き UTF-8、改行コード、データベースの接続設定 — 現場の定番を総ざらいします。
7 総合演習 — 文字化けを推理する
8 問。「縺薙s縺ォ縺。縺ッ」「ã“ã‚“…」などの定番パターンを指紋として読み、実務風ケースで全章を横断します。
受講のコツ
- 本文 → すぐ下の小問の順で進めてください。まとめて後で解くより、読んだ直後に解くほうが定着します。
- 第 3 章のビットの流し込みは、必ず紙に 2 進数を書いて手を動かしてください。一度自分で E3 81 82 を導くと、UTF-8 が「暗記物」から「計算できるもの」に変わります。
- 第 3 章のシミュレータには、自分の名前や仕事で扱う文字列を入れてみてください。バイト数と文字数のズレが体感に変わります。
- 第 7 章のケース問題でつまずいたら、対応する章へ戻って 1〜2 周だけ復習してください。全部やり直す必要はありません。
開始前の前提
- テキストファイルや CSV を扱った経験があれば十分です。プログラミング経験は必須ではありません。
- 16 進数は「0〜9 と A〜F で数を表す書き方」という程度の前提から、章の中で読み方を練習します。
- 2 進数と 16 進数の相互変換(4 ビット = 16 進 1 桁)だけは第 3 章で使うので、本文中で復習を挟みます。