[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:46524] Re: plum の log 機能の文字化け



松田さん、

plum.debパッケージメンテナの後藤です。plum のバグ報告に関して、大変古
いメール (2003年05月25日) に返信致します。

At Sun, 25 May 2003 18:44:31 +0900,
MATSUDA Yoh-ichi / 松田陽一 wrote:
> plum をお使いの方で、ログ機能でログ保存されている方は相応に
> いらっしゃるかと思います。
> 私も最近になって plum のログ機能を使うようになりました。
> 
> 以前から、このログで一部の人の発言がたまに文字化けしているの
> が気になってました。
> 調べてみましたところ、
> 
> - 文字化けする発言者は決まっていて、 7bitJIS の漢字 OUT シー
>   ケンスが抜け落ちている
> 
> ことがわかりました。
> 
> 拙いながらも追いかけてみたのですが、この原因は plum 本体の
> jis_jis サブルーチンにあるように思います。
> 本来ならこのルーチンの最後の方で
> 
>   $ret .= "\e(B" if $kanji;
> 
> と、漢字のフラグが立っているままの状態で行末に至った場合に
> 漢字 OUT を付加している処理があるのですが、これが有効に機能
> していないのではないかと思います。

これについて調べてみました。

> 断言できないんですが、 plum の900行目にある
> 
>     } elsif ($c eq "\cO") {
>       if ($kanji != 2) {
>         if ($last) {
>           $ret .= "\e\$B";
>         } else {
>           $ret .= "\e(B";
>         }
>         $kanji = $last;
>       }
>       next;
> 
> というコードは
> 
>       if ($kanji == 2) {
(snip)
> 
> こうなるべきじゃないか? と思います。

おっしゃる通りだと思います。ここで行なっていることは、

  ・ESC $ @ (JISX1978 Kanji) または ESC $ B (JISX1983 Kanji) の場合
	→ ESC $ B に書き直し
  ・ESC ( J (JISX1978 ASCII) または ESC ( B (JISX1983 ASCII) の場合
	→ ESC ( B に書き直し
  ・ESC ( I (7bit 半角かな) の場合
	→ ESC ( I に書き直し
  ・Ctrl-N (SO) の場合
	→ 半角かなモードになっているなら無視。半角かなモードになって
	   いない場合、ESC ( I に書き直し、それまでのステートを覚えて
	   おく。
  ・Ctrl-O (SI) の場合
	→ 半角かなモードになっているなら無視。半角かなモードになって
	   いない場合、SO 前の状態に応じて ESC $ B または ESC ( B へ
	   書き直し。

となっていますが、Ctrl-O のケースは

	→ 半角かなモードになっていないなら無視。半角かなモードになっ
	   ている場合、SO 前の状態に応じて ESC $ B または ESC ( B へ書
	   き直し。

とすべきだと思います。アップロード予定の plum 2.33.1-10 にて #204470 
でも報告されている修正を取り込んでみますのでお時間がある時に試してみて
下さい。

> # 私の方でも別マシンで試験稼働させてますが、実際に文字化け
> # するクライアントを使っている方の発言がないと、確証がもて
> # ません。

このクライアントとは Chatzilla のことでしょうか?

--
後藤 正徳