チェック・トラブル対処Read this article in English

文字化けパターン早見表 — 縺ゅ↑・é・、「、ハ の化け方から原因と直し方を引く

「縺ゅ↑縺�」「é」「、「、ハ、ソ」— 画面に出ている化けた文字列そのものから、元の文字と原因(実際のエンコーディングと、誤読したエンコーディングのペア)を引く早見表です。理屈ではなく見えているものの順に並べ、日本語を先頭に、欧文・中国語・韓国語・ロシア語も載せました。

使い方は3ステップです。表から自分の化け方に近い行を探す。「実際 → 誤読」のペアを読む。化けた文字列を誤読側でバイト列に戻し、実際側でデコードし直す。どれも「バイト列を別のエンコーディングで読んだ」同じ事故なので、ペアさえ分かれば戻し方は機械的です。

先にルールをひとつ。文字の代わりに「�」(Unicodeの置換文字、U+FFFD)や「?」が並んでいるなら、バイト列はすでに捨てられていて、この表では戻せません。古いコピーを探してください。ただし、見覚えのあるパターンの末尾に「�」が1つ付くだけなら表示側の都合で、ファイルは無事です。

日本語の文字化けパターン一覧 — 縺・繧・繝、ã�‚、半角カナ、銇傘仾

日本語はUTF-8のほかにShift_JIS(Windows版がCP932)とEUC-JPが現役なので、化け方の種類がどの文字体系より多くなります。

  • 縺・繧・繝の列に半角カナが混じる(縺ォ、繝シ): UTF-8をShift_JIS(CP932)として読んだ状態。UTF-8のひらがなは0xE3 0x81か0xE3 0x82で始まり、Shift_JISではこの2バイトが縺か繧です。カタカナは繧か繝、漢字は譌・譛ャのような無関係な漢字になります。最も多い化け方で、完全に戻せます。末尾の「�」は表示側の都合です。
  • ãのあとに�や記号が付き、かな1文字が3文字になる(ã�‚、ã‚“、æ—¥): 同じUTF-8をWindows-1252として読んだ状態。かなはã、漢字はæ・ç・è・éの組です。真ん中の「�」はWindows-1252に定義のないバイトで、ブラウザでは何も出ないこともあります。欧米ロケールの翻訳者やプレイヤーからの「日本語がこう見える」という報告の典型です。
  • カーブした引用符・ƒ・Œと{ [ Qなどの半角英数が混ざる(“ú–{Œê、ƒQ�[ƒ€): Shift_JISのファイルをWindows-1252として読んだ状態。Shift_JISの1バイト目はWindows-1252の記号の行(‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ‘ ’ “ ” • – —)に当たり、2バイト目には半角英数が含まれます。日本語Windowsで保存したCSVを海外のメンバーが開くとこうなります。
  • 半角カナが2文字ずつ並ぶ(、「、ハ、ソ、・ォ・ソ・ォ・ハ): EUC-JPをShift_JISとして読んだ状態。EUC-JPの日本語はShift_JISでは大半が1バイトの半角カナに当たるため、1文字が半角カナ2文字になります。古いサーバーのファイルをWindowsで開いたときに見ます。
  • ¤や¥が1文字おきに現れる(¤¢¤Ê¤¿、¥²¡¼¥à): EUC-JPをWindows-1252として読んだ状態。ひらがなは1バイト目が0xA4(¤)、カタカナは0xA5(¥)で揃うため最も見分けやすく、漢字はÆüËܸìのような組になります。
  • 中国語のような漢字ばかりになる(銇傘仾、鏃ユ湰、偁側偨、擔杮岅): 中国語Windowsのコードページ、GBKが既定のツールで開かれた状態。UTF-8をGBKとして読むと文字数が合わず末尾に�が付きやすく、Shift_JISをGBKとして読むと1文字が漢字1つになって�が出ないため一見きれいに見えます。どちらも戻せます。
  • ほぼ�で、ときどき別の文字が混じる(���Ȃ�、���{��): Shift_JISをUTF-8として読んだ状態。Shift_JISのバイトの組はUTF-8としてほぼ無効なのでデコーダーが捨て、残るものは一定せず、2バイト目が半角英数ならその文字がそのまま出、隣り合う文字のバイトが偶然つながるとȂのような無関係な文字になります。開き直せば表示は戻りますが、この状態で保存されていれば戻りません。
見えているもの      → 元の文字     | 実際のエンコーディング → 誤読したエンコーディング
縺ゅ↑縺�           → あなた       | UTF-8 → Shift_JIS (CP932)
縺薙s縺ォ縺。縺ッ    → こんにちは   | UTF-8 → Shift_JIS (CP932)
譌・譛ャ隱�          → 日本語       | UTF-8 → Shift_JIS (CP932)
譚ア莠ャ             → 東京         | UTF-8 → Shift_JIS (CP932)
ã�‚ã�ªã�Ÿ          → あなた       | UTF-8 → Windows-1252
ã�“ã‚“ã�«ã�¡ã�¯    → こんにちは   | UTF-8 → Windows-1252
日本語           → 日本語       | UTF-8 → Windows-1252
“ú–{Œê             → 日本語       | Shift_JIS → Windows-1252
“Œ‹ž               → 東京         | Shift_JIS → Windows-1252
ƒQ�[ƒ€             → ゲーム       | Shift_JIS → Windows-1252
、「、ハ、ソ             → あなた       | EUC-JP → Shift_JIS
・ォ・ソ・ォ・ハ           → カタカナ     | EUC-JP → Shift_JIS
¤¢¤Ê¤¿             → あなた       | EUC-JP → Windows-1252
¥²¡¼¥à             → ゲーム       | EUC-JP → Windows-1252
ÆüËÜ¸ì             → 日本語       | EUC-JP → Windows-1252
銇傘仾銇�           → あなた       | UTF-8 → GBK
鏃ユ湰瑾�           → 日本語       | UTF-8 → GBK
偁側偨             → あなた       | Shift_JIS → GBK
擔杮岅             → 日本語       | Shift_JIS → GBK
���Ȃ�             → あなた       | Shift_JIS → UTF-8 (欠損あり)
���{��             → 日本語       | Shift_JIS → UTF-8 (欠損あり)
�サソ (ファイル先頭)  → (何もない)   | UTF-8のBOM → Shift_JIS

欧文の文字化けパターン — é、’、©、

欧文のアクセント付き文字の化けは、ほぼすべてUTF-8をWindows-1252(またはISO-8859-1。ブラウザは同じものとして扱います)として読んだ結果です。UTF-8はé・ü・ñを2バイトで表し、1バイト目は0xC3。1バイト=1文字のWindows-1252はこれをÃと表示するので、éはé、üはü、ñはñになります。

  • Ã+1文字: アクセント付きのラテン文字。テキストは正しくUTF-8で保存され、表示側がWindows-1252を仮定しました。完全に戻せます。
  • â€+1文字: カーブした引用符・三点リーダー・enダッシュ・ユーロ記号などの約物。UTF-8では3バイトで先頭が0xE2 0x80なのでâ€になり、3バイト目はアポストロフィなら™、開き引用符ならœ、三点リーダーなら¦です。閉じ二重引用符の3バイト目はWindows-1252に定義がなく、�になるか何も出ません。
  • Â+記号: ©・°・«・»やノーブレークスペースはUTF-8の1バイト目が0xC2で、Windows-1252はそれをÂと表示します。記号の前の余計なÂ、空白のはずの場所のÂがこれです。
  • ファイルの先頭だけに: UTF-8のBOM(一部のエディタが先頭に付ける3バイトの目印)をWindows-1252として表示したもの。他の部分は無事なので、デコードし直すのではなくBOMを取り除きます。詳細は「BOMで先頭だけ壊れる — 文字化け・キー不一致を起こす見えない1文字」で扱っています。
見えているもの      → 元の文字   | 実際のエンコーディング → 誤読したエンコーディング
café              → café       | UTF-8 → Windows-1252
über              → über       | UTF-8 → Windows-1252
niño              → niño       | UTF-8 → Windows-1252
’                → ’          | UTF-8 → Windows-1252
“ â€�            → “ ”        | UTF-8 → Windows-1252
…                → …          | UTF-8 → Windows-1252
–                → –          | UTF-8 → Windows-1252
€                → €          | UTF-8 → Windows-1252
©                 → ©          | UTF-8 → Windows-1252
°                 → °          | UTF-8 → Windows-1252
 (ファイル先頭)  → (何もない) | UTF-8のBOM → Windows-1252

中国語・韓国語・ロシア語の文字化けパターン

他の文字体系も理屈は同じで、先頭バイトが目印です。UTF-8では漢字が0xE4〜0xE9、ハングルが0xEA〜0xED、キリル文字が0xD0〜0xD1で始まり、Windows-1252ではそれぞれä å æ ç è é、ê ë ì í、Ð Ñになります。

  • 中国語: ä å æ ç è éで始まる組(中文)はUTF-8をWindows-1252として読んだもので、漢字1つが3文字になります。Ãが出ず、アクセント付きの大文字が並ぶ(ÖÐÎÄ)のはGBKやGB2312をWindows-1252として読んだもので、漢字1つが2文字。別の漢字と�が交互に出る(涓�鏂�)のはUTF-8をGBKとして読んだものです。
  • 韓国語: í・ê・ìで始まる組(한국어)はUTF-8のハングルをWindows-1252として読んだもの。ハングルは0xEA〜0xEDで始まるため、組の先頭がãではなくê ë ì íになります。
  • ロシア語: ÐとÑが交互に出る(Привет)のはUTF-8をWindows-1252として読んだもの(UTF-8のキリル文字は0xD0か0xD1で始まる)。元の単語と同じ文字数のアクセント付き小文字(Ïðèâåò)はWindows-1251をWindows-1252として読んだもの。РとСが交互に出る(Привет)はその鏡像で、UTF-8をWindows-1251として読んだものです。
見えているもの      → 元の文字   | 実際のエンコーディング → 誤読したエンコーディング
中文             → 中文       | UTF-8 → Windows-1252
ÖÐÎÄ               → 中文       | GBK → Windows-1252
涓�鏂�             → 中文       | UTF-8 → GBK
한국어           → 한국어     | UTF-8 → Windows-1252
Привет       → Привет     | UTF-8 → Windows-1252
Ïðèâåò             → Привет     | Windows-1251 → Windows-1252
Привет       → Привет     | UTF-8 → Windows-1251

二重に化けたパターン — é、’、æ—¥

上のどれより長い化け方もあります。Ã1つのはずの場所にÃ、約物のたびにâ€。欧文パターンが2回かかった状態です。仕組みは「「ãÂ?」「’」の文字化けを直す — UTF-8二重エンコードの見分け方と復元手順」で扱っているので、ここでは見分け方だけを示します。

  • 接頭部で見分けます。ÃはÃの二重、ÂはÂの二重、â€はâ€の二重。1回化けた状態のおよそ2倍の長さで、すべてWindows-1252で有効な文字なので�は出ません。
  • 逆変換を2回かけます。1回で止めると1回化けた状態が残り、進展したように見えるので、本当の単語になったか確認してください。
元の文字 → 1回化けた状態   → 2回化けた状態
café     → café            → café
’        → ’              → ’
…        → …              → …
日本     → 日本           → 日本

ペアが分かったあとの戻し方と、あきらめる基準

直し方はどの行でも同じです。誤読側でバイト列に戻し、実際側でデコードします。擬似コードは次のとおりです。

  • 実際にはコードはほとんど不要です。たいていのエディタは「エンコーディングを指定して開き直す」ことができ、ペアの「実際」側を選べば正しく表示されます。2段階の変換が要るのは元ファイルが失われたときだけです。
  • 検索置換で直さないこと。éをéに置換しても直るのはその1文字だけで、正常なテキストを壊すこともあります。デコードし直せば一度にすべて直ります。
  • 戻したあと、分かっている単語で確認すること。「東京」のはずの文字列が別のパターンに化けていたら、ペアが逆か、もう1層あります。
  • あきらめる基準は欠損付きで保存されていた場合です。ファイル内に�がある、文字の場所が?になっている、戻す途中で新しい�が出るなら、バージョン管理の履歴や元の納品データを探してください。手順は「文字化けの解読と復元手順」で扱っています。
// パターン 縺ゅ↑縺�   ペア: UTF-8 → Shift_JIS
const bytes1 = encodeWith(garbled, "Shift_JIS"); // 元のバイト列に戻す
const fixed1 = decodeWith(bytes1, "UTF-8"); // "あなた"

// パターン “ú–{Œê   ペア: Shift_JIS → Windows-1252
const bytes2 = encodeWith("“ú–{Œê", "Windows-1252");
const fixed2 = decodeWith(bytes2, "Shift_JIS"); // "日本語"

// パターン Ïðèâåò   ペア: Windows-1251 → Windows-1252
const bytes3 = encodeWith("Ïðèâåò", "Windows-1252");
const fixed3 = decodeWith(bytes3, "Windows-1251"); // "Привет"

// 二重に化けた café: Windows-1252 → UTF-8 の手順を2回かける。
// 1回目で "café"、2回目で "café" になる。

ゲーム・ローカライズの現場でこの化け方が生まれる理由

日本語Windowsの表計算ソフトから書き出したCSVは、旧コードページのShift_JIS(CP932)で保存されることが多く、下流はUTF-8を前提にしています。この既定値ひとつが、縺の列と翻訳者から戻る“ú–{Œêの大半を説明します。どの名前がどの表を指すのかは「Shift_JISとCP932の違い」で扱っています。

エンコーディングを明示しないツールはOSのコードページに落ちます。欧米ならWindows-1252、日本語ならCP932、中国語ならGBK。同じファイルが誰の環境で開いたかで3通りに化けるため、開発者の手元では正常でも翻訳者やプレイヤーには壊れて見えます。

関連記事