$Bや(Bがやたら多い文字化けメールの解読
知り合いから「こういうのって解読できる?」って送られてきたのが
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
みたいなメール文。
とりあえず解決方法
エンジニア向けには以下
- JISの
[ESC]
コードが欠落しているので補完してあげる。
$B
->\x1b$B
(B
->\x1b(B
iso-2022-jp
系でデコードする
以下、pythonで作った解読プログラム
# ESCシーケンスを補完する関数
def complete_jis_escape_sequences(jis_string):
completed_jis_string = jis_string.replace(b'$B', b'\x1b$B').replace(b'(B', b'\x1b(B')
return completed_jis_string
# 解読したい文字列
string = b'$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B'
# ESCシーケンスを補完
completed_jis_string = complete_jis_escape_sequences(string)
encode_list = [
"euc-JP",
"utf-8",
"shift_jis",
"iso-2022-jp",
"iso2022_jp",
"iso2022_jp_1",
"iso2022_jp_2",
"iso2022_jp_2004",
"iso2022_jp_3",
"iso2022_jp_ext",
]
for encode in encode_list:
print(encode)
decoded = completed_jis_string.decode(encode)
print(decoded)
出力結果(OKパターン)
euc-JP
K\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-URL$r$4Mw$/$@$5$$!#
utf-8
K\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-URL$r$4Mw$/$@$5$$!#
shift_jis
K\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-URL$r$4Mw$/$@$5$$!#
iso-2022-jp
本システムに関する規約は、下記URLをご覧ください。
iso2022_jp
本システムに関する規約は、下記URLをご覧ください。
iso2022_jp_1
本システムに関する規約は、下記URLをご覧ください。
iso2022_jp_2
本システムに関する規約は、下記URLをご覧ください。
iso2022_jp_2004
本システムに関する規約は、下記URLをご覧ください。
iso2022_jp_3
本システムに関する規約は、下記URLをご覧ください。
iso2022_jp_ext
本システムに関する規約は、下記URLをご覧ください。
解決までの経緯
自分の経験上あまりピンとこない文字化けだったが、調べてみると iso2022_jp
系が $B
とかあって近いかも?って感じだったがエスケープせずにデコードしても解決せず。
出力結果(NGパターン)
euc-JP
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
utf-8
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
shift_jis
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso-2022-jp
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso2022_jp
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso2022_jp_1
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso2022_jp_2
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso2022_jp_2004
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso2022_jp_3
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
iso2022_jp_ext
$BK\%7%9%F%`$K4X$9$k5,Ls$O!"2<5-(BURL$B$r$4Mw$/$@$5$$!#(B
いろいろ調べてたら次のサイトに辿りつき、ひとまず解読できることはわかった。
あとはそれっぽいキーワードで調べると解説サイトがいくつかあったので、無事理解ができました。
- https://www.kanzaki.com/docs/jis-esc.html#descaped-JIS (opens new window)
- http://charset.7jp.net/jis.html (opens new window)
以上。