文章の途中から漢字だらけの文字化けを復号するには

この方法がズバリ解決方法なのかは定かでありませんがまとめてみました。

文字化けにも送信者側と受信者側でエンコードが違った場合やOutlookとLivemailとかならリッチテキストで送信された場合等、色々な原因のものがありますが、今日は文章の途中から漢字だらけの文字化けがあった場合にどう復号するかに絞っていきたいと思います。

◆現象
あるウェブページの問い合わせフォームに入力された文章を、受けとる側のメールクライアントに転送するような仕組みがあった時、転送されてきたメールクライアントで文章の後半部分が漢字だらけで文字化けする

例 こんなん →  文章です。これw) €ョ・鮓任・笋硫泙埃后蠶譴△鬟馬⇒蹐柔④篋・ ←みたいな

※漢字を並び替えてるのでこれを復号しても何の意味も持ちません
ただ、今回は改行が含まれる開始部分に w)□ があったのでわかりやすかったです。


◆原因
メールサーバーなのかアプリケーションサーバーの仕様で、問合せフォーム側で文章を改行せずに1行で1000バイト(漢字とか2バイトコードなら500文字程度)を超えると自動的に改行が挿入され文字コードが1バイトずれてからSJISエンコードされて起こったと推測されます。


◆解決方法
じゃあ改行を除けばいいじゃないという事でOUTLOOKで受信した文字化け含みメールをUTF-8エンコードします。

OutlookではUTF-8エンコードすると一行ごとに □$B 文章 □)B で囲われた文字の羅列で表示されます。 ※□は半角スペース


これをエディタに貼り付けます。私はさくらエディタをつかっているのでそれに貼り付けました。
貼り付けてわかると思いますが自動的に挿入された改行が含まれている行だけ違和感があると思います。
(絵がなくて済みません)

自動挿入された改行は □(BW)□ですのでこれを削除します。間にスペースを入れないように注意。

あとは一行にするために □$B と □)B□改行 を削除します。

一行になったらSJISに変換で復号できました。なんて・・・

実のところエディタでは復号できなかったのでツール(MBake2)を使ってSJISエンコードして復号しました。この辺がなんでかはまだ調べがついておりません。

実際の要件は読めることだったので、復号できただけで御の字。実際はもっと掘り下げるべきなんでしょうがまた時間があるときに(ないな・・・)見てみたいと思います。

原因を追究するのは大変だけど楽しいのですが実際の現場って原因よりも解決が優先されるのでもどかしい面もありますよね。


にしてもただ、改行が含まれると文字化けするという原因がわかればある程度解決方法も見えてくるので今回は良い経験になりました。もう少し技術的に意味を理解しないといけませんが・・・


補足:文字コードにも1バイトのものと2バイトのものがあってそのコード表の中には当然含まれない文字もあるのでその辺はある程度覚えておかないといけないかも。 ・で表現されてるところはからってことだと思うので。


※ちなみにWebページ側でちゃんとチェックせいよっていう突っ込みはなしでお願いします・・・