zsh のhistoryファイルは特殊な処理が入っているので文字化けする zsh historyにおける非ASCII文字の扱いについて
文字化けしたzsh_historyファイルを読めるようにする
ぁあぃいぅうぜそぞただちぢっつづ
という文字列を使って調べていく。
これらは頭2バイトが e381
、末尾1バイトがそれぞれいかのようになる。
ぁ
:81
あ
:82
ぃ
:83
い
:84
ぅ
:85
う
:86
ぜ
:9c
そ
:9d
ぞ
:9e
た
:9f
だ
:a0
ち
:a1
ぢ
:a2
っ
:a3
つ
:a4
づ
:a5
zsh_historyで見ると以下のようなバイト列になっている(わかりやすいよう適宜スペースを入れている)
zsh_historyの文字コードはlatin1なのでほぼUTF-8と同じ。
文字コード表をもとに当てはまる文字に戻すと、 0x83-0xA2
のとき、直前に 0x83
を入れてから6bit目を反転させていることがわかる。
0x83
を消して、直後の6bit目を反転させると以下のようになる
これがもとの文字列のバイト列に一致する。