読者です 読者をやめる 読者になる 読者になる

「文字化けに関するトラブルシューティング」

ちょっと前の話ですが、こんなツイートを見かけました。

職業柄文字化けデータを見ると復元せずにはいられないので、文字化けデータを私に見せるのはやめて欲しいです。

文字化け業界に長くいると、経験上パッと見てなんで文字化けしたのかだいたいわかるようになります。 今回のは、本来 EUC-JP なのにシフトJISとして表示しちゃってる感じです。

半角カナが多い場合はだいたいこのパターンです。

% ruby -e 'puts "日本語にほんごニホンゴ".encode("EUC-JP").force_encoding("SHIFT_JIS").encode("UTF-8", undef: :replace, invalid: :replace, replace: "?")'
ニ?ワク?ヒ、ロ、?エ・ヒ・ロ・?エ

画数の多い漢字の中に半角カナが少々混じるのは、UTF-8 をシフトJISとして表示しています。

% ruby -e 'puts "日本語にほんごニホンゴ".encode("UTF-8").force_encoding("SHIFT_JIS").encode("UTF-8", undef: :replace, invalid: :replace, replace: "?")'
譌・譛ャ隱槭↓縺サ繧薙#繝九?繝ウ繧エ

$% が1文字置きに現れるのは ISO-2022-JP の ESC が落ちたか、EUC-JP の 8bit目が落ちた場合です。 ISO-2022-JP の場合は $B(B が現れます。

% ruby -e 'puts "日本語にほんごニホンゴ".encode("ISO-2022-JP").force_encoding("ASCII-8BIT").gsub(/\e/n,"?")'
?$BF|K\8l$K$[$s$4%K%[%s%4?(B
% ruby -e 'puts "日本語にほんごニホンゴ".encode("EUC-JP").force_encoding("ASCII-8BIT").bytes.map{|b| b & 0x7F}.pack("c*")'
F|K\8l$K$[$s$4%K%[%s%4

ということで、変換に伴って欠落してしまうデータはあるものの、元の文字コードが何だったのかがわかってしまえば、文字化けしたデータから元データを復元するのはそんなに難しくありません。

ですが、今回のは画像だし、フォントサイズも小さいので画数の多い字は潰れてしまって判別できなくて難易度高いです。

とりあえず文字を拾って見ます。「・」は変換できなかった文字(「・」の一部も)で、「?」は変換できたものの画像から判別できなかった文字です。

サトヌー、ハ、ャ、鮑ス・ミ。シ・ク・逾・ホ」ラ」??茱・・・ヌ、マ
ハクサ?ス、ア、・ハ、ェ、ケ、ウ、ネ、マスミヘ?゙、サ、・」
」イ」ー」イ」オヌッネッヌ莽スト熙ホ」ラ」??茱・・・ヌ、マツミア・、キ、゙、ケ。」
、ウ、ホ・ネ・?ヨ・・キ・蝪シ・ニ・」・・ー、ヌ、マ。「
、ウ、ホ、?ヲ、ハフ萃熙ホクカー・・ヘ、ュザ、癸「
フ萃熙・・?ケ、・・?・ィ、キ、゙、ケ。」
シチフ荀ホナ妤ィ、・ッ・・テ・ッ、キ、ニ、ッ、タ、オ、、。」
シ・遉ヒスセ、テ、ニソハ、゚、ハ、ャ、?萃熙・・?ヌ、ュ、゙、ケ。」

、ノ、ヲ、キ、゙、ケ、ォ。ゥ

サナハ・、ャ、ハ、、、ォ、?ヨ・タ・、・「・?ー、ヌヘキ、ワ、ヲ。ラ、・ワヘ・」
。ヨナマノ・キ・・、・チ、ホ」ト」螢凜癸?・・。」ラ」マ」メ」フ」ト。ラ、・ワヘ・」

これを単純に変換すると

残念ながら現バージョ??E裡廝?H?H筍?E?E?E任?
文??H修韻?E覆?垢海箸禄侏?H泙擦?E?
2025年発売予定のW??H?H筍?E?E?E任和弍イ靴泙后?
このト??H屮?E轡紂璽謄??E阿任蓮?
この??HΔ別簑蠅慮彊?E?E佑?泙瓠?
問題??E?E?H垢?E?E?H?E┐靴泙后?
質問の答え??E??E奪?靴討?世気ぁ?
??E腓暴召辰匿覆澆覆??H簑蠅?E?E?H任?泙后?

どうしますか?

仕淵がないか??H屮瀬ぅ▲?H阿罵靴椶Α廚?E寨?E?
「渡??E轡?Eぅ舛裡庁紕蝪瓠?H?E?E。廝錬劭味帖廚?E寨?E?

となりました。なんだかわかりませんね。 「・」は変換できなかった文字ですが、ここで文字境界がずれてしまっています。適当に1バイトの「ア」とかに置き換えてから変換してみます。

残念ながら現バージョケ裡廝?H?H筍臼映は
文??H修韻永おすことは出??H泙擦隠
2025年発売予定のW??H?H筍臼映は対吋します。
このト??H屮鰻ューティケ阿任蓮?
この??HΔ別簑蠅慮彊臼佑?泙瓠?
問題け??H垢臼?H烏します。
質問の答えけ?叡クしてください。
識腓暴召辰匿覆澆覆??H簑蠅臼?H任?泙后?

どうしますか?

仕淵がないか??H屮瀬ぅ▲?H阿罵靴椶Α廚閲猶?
「渡姫轡韻チのDeja??H臼。廝錬劭味帖廚閲猶?

さっきよりはマシになった気がします。

あとは、前後の文脈から判断して、文字を埋めて逆変換して元の画像の文字と合うかどうかを確認していくという地道な作業を行います。「現バージョケ」は恐らく「現バージョン」だろうとか、そういう感じで。

復元した結果がこれです。

残念ながら現バージョンのWindowsでは
文字化けをなおすことは出来ません。
2025年発売予定のWindowsでは対応します。
このトラブルシューティングでは、
このような問題の原因を突き止め、
問題を解決する手順を示します。
質問の答えをクリックしてください。
手順に従って進みながら問題を解決できます。

どうしますか?

仕方がないから「ダイアログで遊ぼう」を閲覧。
「渡部シンイチのDejavu WORLD」を閲覧。

内容が意味不明でちょっと怖いんですけど…。

[追記]

はてブのコメントで知ったのですが、どうやら元ネタは、「ダイアログで遊ぼう」というサイトに投稿されたネタ画像のようです。 「渡部シンイチのDeja=vu WORLD(デジャ=ヴ・ワールド)」で製作者のコメントを見ることができます。