本サイトはプロモーションを含みます。

ログの文字化け対策について

先日、知人からLinuxサーバでログを取得する際に文字化けしてしまう、という相談を受けました。理由はすぐに分かりました。Linuxのデフォルトシェルはbashですが、bashのプロンプトにはエスケープシーケンスが含まれている場合があり、この文字をログファイルに保存してしまい文字化けが発生します。

ぼく自身は、今まで文字化けについては気にもとめていませんでしたが、意外とこういう点で悩んでいる方もいるかと思い、ログ保存時のパラメータについて解説しようと思います。

文字化けの例

]0;foo@osiris:~[foo@osiris ~]$
]0;foo@osiris:~[foo@osiris ~]$ hostname
osiris.infrapod.net
]0;foo@osiris:~[foo@osiris ~]$

先頭の文字がおかしいですね。

バイナリモードを解除する

logopenコマンドは最低限3つの引数をとります。

logopen <filename> <binary flag> <append flag> [<plain text flag> [<timestamp flag> [<hide dialog flag> [<Include screen buffer>]]]]

最初の引数「filename」はログファイル名です。これはいいですね。問題は次の「binary flag」です。この値を0にすると、バイナリモードは解除されて文字コードをマクロの実行環境の文字コード(Shift JIS)へ変換してログファイルへ保存します。文字コードのデフォルトはCP932(Shiit JIS)です。この設定はTera Termの[設定]-[端末]から変更できます。

また、エスケープシーケンスをログファイルへ保存しないため文字化けは発生しません。

反対に「binary flag」を0でない値(1など)にすると送受信したすべての文字列をログファイルに保存します。文字化けの原因はこれです。送受信したやり取りをそのまま保存する必要がなければ、バイナリモードを解除するために「1」など0でない値を設定してください。

徹底するなら「plain text flag」も

基本的にはバイナリモードを解除するだけで問題はありませんが、文字化け対策を徹底したいのであれば「plain text flag」を設定してください。「plain text flag」はオプション扱いです。「plain text flag」を0でない値(1など)にすると通常画面には表示されないASCII 非表示文字をログファイルへ保存しなくなります。

まとめ

個人的にはバイナリモードはON(1など)にして、送受信した内容はすべてそのまま保存することをオススメします。というのも、エスケープシーケンスを削除する上に送受信した文字コードまで変換してしまうため、何か問題があった際の証跡としてはなるべく加工されていない素のデータが望ましいと考えているためです。また、Tera Termのログ再生機能を使うためには、ログをバイナリモードで保存する必要があります。

ただし、やり取りしたビット単位のデータよりも表示内容に主眼を置くような場合はその限りではないので、バイナリモードを解除して対策した方が良いかも知れません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)