文字化け

こんなツイートを見かけたので文字化けを直してみました。

見た感じ、UTF-8をシフトJISとして表示したときのようなので、ツイートをコピペしたファイルをシフトJISに変換してみます。

% ruby -e 'p File.read("mojibake.txt").encode("cp932", undef: :replace).force_encoding("utf-8")'
"\xE6\x96?\xAD\x97化けしち\xE3\x82?\x81\xA3たツイートしてみたけど、
うそだよ\xE3??\x81ってこ\xE3?\xE6\x96?\xAD\x97化け解読してくれる
人\xE3\x81?\x82\x8Bのかな。いたら感\xE6\xBF。これ読んだよ\xE3?って
人「騙されなかった\xE3\x8D返信お\xE5\xBE?\x81\xA1してる\xE3\n"

良さそうな感じです。

文字にならなかった部分は、前後の文脈からそれっぽい文字を推測して、コードがあってるかどうか確かめながら埋めていきます。

\xE6\x96?\xAD\x97化け はおそらく 文字化け でしょう。文字\xE6\x96\x87\xE5\xAD\x97 なので合ってそうです。 同様にしち\xE3\x82?\x81\xA3たしちゃ(\xE3\x82\x83)っ(\xE3\x81\xA3)たくれる人\xE3\x81?\x82\x8Bのかなくれる人い(\xE3\x81\x84)る(\xE3\X82\x8B)のかな感\xE6\xBF感激(\xE6\xBF\x80)かった\xE3\x8D返信かった」(\xE3\x80\x8D)返信 お\xE5\xBE?\x81\xA1してるお待(\xE5\xBE\x85)ち(\xE3\x81\xA1)してる

ここまででこのようになりました。

文字化けしちゃったツイートしてみたけど、うそだよ\xE3??\x81って
こ\xE3?文字化け解読してくれる人いるのかな。いたら感激。
これ読んだよ\xE3?って人「騙されなかった」返信お待ちしてる\xE3

まあだいたい文脈はつかめます。

あとの文字は1バイトずつしかわからないので難しいんですが、

うそだよ\xE3??\x81って\xE3??\x81\xE3????\x81 の二文字だと思います。二文字目は \x81 で終わる文字の中で妥当なのは くらいです。一文字目はわかりません。\xE3 で始まる文字はすべての平仮名と片仮名等が含まれます。文脈からして うそだよーうそだよん あたりでしょうか。

こ\xE3?文字化けこの文字化け で、読んだよ\xE3?って人読んだよーって人 かな。

最後の文字は かと思ったけど、ちょっと変なので かもしれない。

ということで次のようになりました。

文字化けしちゃったツイートしてみたけど、うそだよー、って
この文字化け解読してくれる人いるのかな。いたら感激。
これ読んだよーって人「騙されなかった」返信お待ちしてるよ