flashのログをtailした時の文字化けを解決してみる

Debug PlayerのTrace出力はFlash文字コードに従うけど、警告の出力はsjisで出力されてしまう。

ターミナルはutf8表示にしてあるので、ログをtailで眺めていると行毎に文字コードが変わって大変なことに。

かといって、ターミナルをsjis表示にしたら

そこで、文字コードを判別してutf8に変換する1linerなPerlを途中にかまして奇麗にしてみる。

trace実行用のshを作成

#!/bin/sh

# 起動時はとりあえずlogの初期化
>~/Library/Preferences/Macromedia/Flash\ player/Logs/flashlog.txt

# なんとなくわかりやすいように表示
echo "== Flash Trace Mode =="

# Tail+Perlでutf8じゃなければ変換する
tail -f ~/Library/Preferences/Macromedia/Flash\ player/Logs/flashlog.txt | perl -ne 
'use Encode;use Encode::Guess;Encode::Guess->set_suspects(qw/euc-jp shiftjis 7bit-jis/);
$_ = Encode::decode("Guess",$_);print utf8::is_utf8($_)? encode("utf-8",$_):$_;'

実行

$ chmod +x fltrace.sh
$ ./fltrace.sh

ちゃんと変換されてる。良いんじゃないかな。