合同会社小村ソフト
第 7 章

総合演習 — 文字化けを推理する

化け方には指紋がある。実務の障害調査を模した 8 つのケースで、「どの符号化で書かれたバイト列を、どの符号化として読んだのか」を全章の知識で推理する。

仕上げの 8 問 — 化けた画面は「証拠」である

最終章は総合演習です。ここまでの章で、化け方には指紋があることを学びました。「縺」「繧」「繝」が並べば UTF-8 の Shift_JIS 誤読、ã が並べば Latin-1 誤読、� の連発なら Shift_JIS 系の UTF-8 誤読、? への置換なら変換時のデータ喪失。化けた画面はもはや意味不明の記号ではなく、誤読の組み合わせを語る証拠です。

8 つのケースすべてで、合言葉に立ち返ってください — どの符号化で書かれたバイト列を、どの符号化として読んでしまったのか?

つまずいたら戻る章
バイト列と読み方・文字集合と符号化の区別第 1 章
コードポイント・U+XXXX の読み方第 2 章
UTF-8 のバイト構造・E3 の意味・BOM第 3 章
Shift_JIS の 2 バイト構造・ダメ文字・CP932第 4 章
サロゲートペア・length の数え方第 5 章
宣言と実体・Excel と BOM・DB の接続設定第 6 章
縺・繧・繝は UTF-8 の Shift_JIS 誤読、ã の羅列は Latin-1 誤読、置換文字の連発は Shift_JIS の UTF-8 誤読、? への置換は変換時のデータ喪失、という 4 つの定番パターンの図

4 つの定番パターン。左上と右上は読み直せば復元できる「誤読」、右下は元データが失われた「置換」— 見分けが復旧可否の判断に直結します。

推理を支える 3 つの事実(復習)

  • ひらがなの UTF-8 は E3 81 / E3 82 / E3 83 で始まる(第 3 章)。この 2 バイトは Shift_JIS の表では「縺」「繧」「繝」— だから UTF-8 → Shift_JIS 誤読ではこの 3 文字が大量発生する。たとえば「文字化け」自体を誤読すると「譁�ュ怜喧縺�」になる
  • Shift_JIS の 2 バイト目は ASCII 域に食い込む(第 4 章)。UTF-8 として読むと大半が不正で �(環境によっては ? 表示)になり、2 バイト目の英字だけが破片として残る
  • Latin-1 系は 1 バイト = 1 文字で必ず「読めて」しまう。UTF-8 の 3 バイトが 3 文字のラテン文字にふくらみ、E3 由来の ã が目印になる

では、始めましょう。

ケース 7-1 — 化け方の指紋を読む

第 1・3・4 章の範囲です。化けた文字の並びそのものが証拠になります。

Q1. ケース: 取引先からの CSV を開いたら「縺薙s縺ォ縺。縺ッ」のように、「縺」「繧」「繝」と半角カナが混ざった文字列が並んでいました。最も有力な推理はどれですか。

Q2. ケース: 別のファイルでは「テスト」と書かれていたはずの箇所が「�e�X�g」— 置換文字「�」の合間にぽつぽつ英字が残る形に化けていました。最も有力な推理はどれですか。

Q3. ケース: 海外製ツールを通した日本語テキストが「ã“ã‚“ã«ã¡ã¯」のような、アクセント付きラテン文字の羅列になりました。しかも元の 1 文字あたり 3 文字前後にふくらんでいます。最も有力な推理はどれですか。

ケース 7-2 — 現場の障害を切り分ける

第 4〜6 章の範囲です。CSV・メール・置換 — 症状の違いから原因の層を切り分けてください。

Q4. ケース: 自社システムが出力した UTF-8(BOM なし)の CSV について、「Excel でダブルクリックすると日本語が『縺薙s…』のように化ける」と問い合わせが来ました。原因と対策の組み合わせとして正しいものはどれですか。

Q5. ケース: 顧客名簿を移行したところ、一部の顧客名が「????」になっていました。「縺薙s…」型の化けとの決定的な違いはどれですか。

Q6. ケース: 受信したメールの本文は正常なのに、件名だけが「=?UTF-8?B?...?=」のような記号列や意味不明の文字になっています。考えられる原因として最も適切なものはどれですか。

ケース 7-3 — 推理の総仕上げ

全章横断です。合言葉 — どの符号化で書かれたバイト列を、どの符号化として読んだのか — に立ち返ってください。

Q7. ケース: Shift_JIS 前提の古い連携プログラムに「ソフト一覧.csv」というデータを通すと、「ソ」を含む行だけ列がずれて取り込まれます。最も有力な原因はどれですか。

Q8. ケース: EUC-JP で蓄積された旧システムのデータを UTF-8 の新システムへ移行します。正しい手順はどれですか。

講座の終わりに — 2 段階と 1 つの問いを持ち歩く

お疲れさまでした。この講座で暗記してもらった対応表は、実はほんの数行です。代わりに持ち帰ってほしいのは、どんな場面でも通用する見方でした。

  • 文字は常に 番号(コードポイント)→ バイト列(符号化)の 2 段階で扱われる
  • ファイルの実体はバイト列だけ。宣言(ラベル)は読み方の指示にすぎず、実体を変換しない
  • 化けたら問う — どの符号化で書かれたバイト列を、どの符号化として読んでしまったのか。化け方の指紋が方向を教えてくれる
  • 誤読は可逆、置換(?)は不可逆。化けたまま保存しない

次に文字化けに出会ったとき、あなたはもう「符号化を適当に変えて開き直す人」ではありません。証拠から誤読の組み合わせを特定し、宣言と実体のどちらを直すべきか判断できる人です。第 3 章のシミュレータは今後も自由に使えます — 怪しいバイト列に出会ったら、ぜひ手元で再現してみてください。