放置していたIRC用BOT「NGIB」用に色々探した時のメモ。NGIBの製作はそれでも着ちゃ…まぁまぁ進んでますw
コードはこんな感じです。$paramsにはPrivateメッセージのオプション部分が入ってます。
まず簡単に…、IRCのPrivateメッセージの形式は
このような感じです。nick、username、リモートホスト、コマンド、メッセージターゲット、そしてメッセージの本文であるオプション部分です。オプション部分は、実際の文字コードはJISです。コンソールとかだと化けますね。
で。普通にJIS(ISO-2022-JP)だけであればEncodeモジュールを使ってshiftjisに変換すればいいのですが、LimeChatなどに搭載されている半角カナ送信機能によって半角カナが混ぜられたメッセージは、上手く変換できません。
そこで。Unicode::Japaneseモジュールを使います。ppmじゃインストールできないのでどうにかCPAN環境を整えてインストールしてください(ぉ
まず1行目でモジュールを指定します。これはお約束。3行目ではJISコードからUTF8に変換、4行目でUTF8をShiftJISに変換しています。なぜ一旦UTF8に変換しているかというと単純な話で、直にJIS→ShiftJISの変換が出来ない…っぽいからです。
これで半角カナ交じりのJISコード文字列もShiftJISで表示することが出来ます。
use Unicode::Japanese;
~~~~
my $message=Unicode::Japanese->new($params, 'jis')->get;
$message=Unicode::Japanese->new($message)->sjis;
print $message;
まず簡単に…、IRCのPrivateメッセージの形式は
:Arvined!~****@************.adsl.ppp.infoweb.ne.jp PRIVMSG #ngib :テスト
このような感じです。nick、username、リモートホスト、コマンド、メッセージターゲット、そしてメッセージの本文であるオプション部分です。オプション部分は、実際の文字コードはJISです。コンソールとかだと化けますね。
で。普通にJIS(ISO-2022-JP)だけであればEncodeモジュールを使ってshiftjisに変換すればいいのですが、LimeChatなどに搭載されている半角カナ送信機能によって半角カナが混ぜられたメッセージは、上手く変換できません。
そこで。Unicode::Japaneseモジュールを使います。ppmじゃインストールできないのでどうにかCPAN環境を整えてインストールしてください(ぉ
まず1行目でモジュールを指定します。これはお約束。3行目ではJISコードからUTF8に変換、4行目でUTF8をShiftJISに変換しています。なぜ一旦UTF8に変換しているかというと単純な話で、直にJIS→ShiftJISの変換が出来ない…っぽいからです。
これで半角カナ交じりのJISコード文字列もShiftJISで表示することが出来ます。
print $message;
でShiftJISに変換されたメッセージの中身が表示される筈です。
コメント