Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

概略バッファのFrom領域が文字化けする

4 views
Skip to first unread message

Yoshitaka Ikeda

unread,
Jun 8, 2007, 2:55:35 AM6/8/07
to
さっそく、Emacs 22.1をインストールしたんですが、gnusの概略バッファで
Fromの部分が化けます。
<f4a113$55n$1...@news-est.ocn.ad.jp>
とか。

iso-2022-jpでエンコードしてる人です。

で、本文のエリアではちゃんと表示できます。
また、概略バッファもSubject欄はちゃんと表示できます。
#ちなみに、TerminalはEUC-jpです。


というわけで、対策法を探しています。
--
I LOVE SNOOPY! でつ
Yoshitaka Ikeda mailto:ik...@4bn.ne.jp
My Honeypot: ho...@4bn.ne.jp <-don't send this address

Katsumi Yamaoka

unread,
Jun 8, 2007, 4:13:56 AM6/8/07
to
>>>>> In <86wsyf0...@bsd2.4bn.ne.jp>
>>>>> Yoshitaka Ikeda <ik...@4bn.ne.jp> wrote:

> さっそく、Emacs 22.1をインストールしたんですが、gnusの概略バッファで
> Fromの部分が化けます。
> <f4a113$55n$1...@news-est.ocn.ad.jp>
> とか。

発信者の名前やアドレスではなくて、そのような Message-ID (ですよ
ね?) が表示されるということでしょうか?

Gnus 起動後の gnus-summary-line-format の値を教えて下さい。
それから、

(gnus-update-format-specifications t 'summary)

この行末で `C-x C-e' (または `M-x eval-last-sexp RET') をタイプ
して、いったん概略バッファを出てみて下さい。これは ~/.newsrc.eld
ファイルに記録されていた古い概略行の表示仕様[1] を更新します。

[1] gnus-summary-line-format-spec
--
山岡

Katsumi Yamaoka

unread,
Jun 8, 2007, 4:20:08 AM6/8/07
to
(ちょっと間違いがあったので記事を差し換えました。_o_)

>>>>> In <86wsyf0...@bsd2.4bn.ne.jp>
>>>>> Yoshitaka Ikeda <ik...@4bn.ne.jp> wrote:

> さっそく、Emacs 22.1をインストールしたんですが、gnusの概略バッファで
> Fromの部分が化けます。
> <f4a113$55n$1...@news-est.ocn.ad.jp>
> とか。

発信者の名前やアドレスではなくて、そのような Message-ID (ですよ
ね?) が表示されるということでしょうか?

Gnus 起動後の gnus-summary-line-format の値を教えて下さい。
それから、

(gnus-update-format-specifications t 'summary)

この行末で `C-x C-e' (または `M-x eval-last-sexp RET') をタイプ
して、いったん概略バッファを出てみて下さい。

--
山岡

Katsumi Yamaoka

unread,
Jun 8, 2007, 4:41:00 AM6/8/07
to
>> さっそく、Emacs 22.1をインストールしたんですが、gnusの概略バッファで
>> Fromの部分が化けます。
>> <f4a113$55n$1...@news-est.ocn.ad.jp>
>> とか。

> 発信者の名前やアドレスではなくて、そのような Message-ID (ですよ
> ね?) が表示されるということでしょうか?

すみません。わたしがばかでした。^^;;
その fj.soc.politics の記事の From 行

From: =?iso-2022-jp?B?GyRCQjw+ZT83SCwbKEI=?= <...>

に問題はありませんね。

> Gnus 起動後の gnus-summary-line-format の値を教えて下さい。

ぼくはこういうのを使っています。

(setq gnus-summary-line-format "%U%R%z%I%(%[%5N: %-9,9f%] %S%)\n")

Katsumi Yamaoka

unread,
Jun 8, 2007, 6:01:54 AM6/8/07
to
何度も出てきてカッコ悪いんですが、すぐには解決できそうもないので。

>>>>> In <86wsyf0...@bsd2.4bn.ne.jp>
>>>>> Yoshitaka Ikeda <ik...@4bn.ne.jp> wrote:

> さっそく、Emacs 22.1をインストールしたんですが、gnusの概略バッファで
> Fromの部分が化けます。
> <f4a113$55n$1...@news-est.ocn.ad.jp>
> とか。

まだ再現条件すらわからないのですが、開発版や Emacs 22.1 に付属し
ている版の Gnus などをとっかえひっかえしていたら From の部分の文
字化けに遭遇しました。

まずは暫定対策です。おそらく gnus-agent という変数の値はデフォル
トの t だと思います。そうでなかったら以下は見当違いということに
なりますが。

Gnus を起動して、

M-x gnus-agent-expire RET

を実行し、いったん Gnus を終わらせて下さい。
次に ~/.gnus.el ファイル[1] に以下を書き込んで下さい。

(setq gnus-agent nil)

そうすると、次に Gnus を起動したときから文字化けが起こらなくなる
のではないかと思います。いかがでしょう?

[1] お手元にあるのは ~/.gnus かもしれません。もし ~/.gnus.el と
~/.gnus の二つがあるならば混乱の元なので、どちらか一方 (なるべく
なら ~/.gnus.el) に統一して下さい。

この暫定対策は Gnus の動作を少し遅くします。たぶん気が付かないと
思いますが。以下は現在までにわかったことの説明です。ご興味が無け
れば無視して下さい。

gnus-agent は一度読んだ記事の、ヘッダーだけ、を手元のファイルに
キャッシュしておく仕掛けで、次に同じグループの概略バッファを表示
するときに、再びサーバーから取り寄せるのは、その後で届いた新しい
記事のものだけになります。しかし (setq gnus-agent nil) とすると、
毎回必要な記事のヘッダーをサーバーから取り寄せます。

文字化けが起きる記事の、サーバー側にある記事の本体や overview は
正常でした。しかし、gnus-agent がキャッシュしたヘッダーのデータ
では、From の名前だけが、デコードされたもので置き換えられてしま
うことがあるようなのです。これをもう一度表示するときにデコードす
る結果、おかしなことになってしまいます。ちなみにこのキャッシュは、
デフォルトでは以下のような場所にあります:

~/News/agent/nntp/ganews/fj/soc/politics/.overview
--
山岡

Katsumi Yamaoka

unread,
Jun 8, 2007, 6:07:13 AM6/8/07
to
>>>>> In <b4mvedy...@jpl.org> 山岡 wrote:

> 何度も出てきてカッコ悪いんですが、

もう 4度目。^^;;

[...]

> ちなみにこのキャッシュは、デフォルトでは以下のような場所にあります:

> ~/News/agent/nntp/ganews/fj/soc/politics/.overview

すみません、この ganews という部分はお使いのサーバーの名前で置き
換えて下さい。
--
山岡

Yoshitaka Ikeda

unread,
Jun 8, 2007, 5:49:19 PM6/8/07
to
池田です。

Katsumi Yamaoka <yam...@jpl.org> writes:

> Gnus を起動して、
>
> M-x gnus-agent-expire RET
>
> を実行し、いったん Gnus を終わらせて下さい。
> 次に ~/.gnus.el ファイル[1] に以下を書き込んで下さい。
>
> (setq gnus-agent nil)
>
> そうすると、次に Gnus を起動したときから文字化けが起こらなくなる
> のではないかと思います。いかがでしょう?

これで、確かに文字化けがなくなってます。

> gnus-agent は一度読んだ記事の、ヘッダーだけ、を手元のファイルに
> キャッシュしておく仕掛けで、次に同じグループの概略バッファを表示
> するときに、再びサーバーから取り寄せるのは、その後で届いた新しい
> 記事のものだけになります。しかし (setq gnus-agent nil) とすると、
> 毎回必要な記事のヘッダーをサーバーから取り寄せます。
>
> 文字化けが起きる記事の、サーバー側にある記事の本体や overview は
> 正常でした。しかし、gnus-agent がキャッシュしたヘッダーのデータ
> では、From の名前だけが、デコードされたもので置き換えられてしま
> うことがあるようなのです。これをもう一度表示するときにデコードす
> る結果、おかしなことになってしまいます。ちなみにこのキャッシュは、
> デフォルトでは以下のような場所にあります:

gnusの新しいコードの問題なんでしょうか?
それとも、新しいコードと古いコードによるキャッシュとの間の問題
なんでしょうか。

Katsumi Yamaoka

unread,
Jun 10, 2007, 8:56:22 PM6/10/07
to
>>>>> In <86d506f...@bsd2.4bn.ne.jp> 池田さん wrote:

> Katsumi Yamaoka <yam...@jpl.org> writes:

>> Gnus を起動して、
>>
>> M-x gnus-agent-expire RET
>>
>> を実行し、いったん Gnus を終わらせて下さい。
>> 次に ~/.gnus.el ファイル[1] に以下を書き込んで下さい。
>>
>> (setq gnus-agent nil)
>>
>> そうすると、次に Gnus を起動したときから文字化けが起こらなくなる
>> のではないかと思います。いかがでしょう?

> これで、確かに文字化けがなくなってます。

そうしたら、再び (setq gnus-agent t) とする、またはその行そのも
のを消す (デフォルトが t なので) のは問題無いと思いますよ。

[...]

> gnusの新しいコードの問題なんでしょうか?
> それとも、新しいコードと古いコードによるキャッシュとの間の問題
> なんでしょうか。

たぶんかなり前から Gnus に存在しているバグだと思います。というの
は、今回たまたま池田さんに合わせてぼくも同じ現象を見ただけでなく、
ずっと Gnus を使い続けているぼくが以前にも見たことがありますから。
ただ、今回と同様に再現方法が見つからず、棚上げになっていました。

ヘッダーをキャッシュするファイルの中身の形式は nntp サーバーの
overview ファイルと同等のもので、gnus-agent.el が導入された当初
から基本的には変化していないはずです。しかし gnus-agent.el は大
きな変更がたびたび行なわれたので、途中で虫が入ってしまったのかも
しれません。

闇雲に再現方法を探しても見つかりそうにないので、今後はコードを読
み進めようと思っています。
--
山岡

Katsumi Yamaoka

unread,
Jun 14, 2007, 8:29:07 AM6/14/07
to
>>>>> In <b4m645v...@jpl.org> 山岡 wrote:

> 闇雲に再現方法を探しても見つかりそうにないので、今後はコードを読
> み進めようと思っています。

解決しました (たぶん)。Emacs 22.1 付属の Gnus v5.11 に当たるパッ
チを付けます。詳しい原因は Gnus の開発メーリングリストに書きまし
たが[1]、要は犯人はぼくだったということです。どうもすみません。

Gnus を起動した直後にどこかのニュースグループで記事を何通か読も
うとしたときに、それらがすべて expire されてしまっている場合、サー
バーはそれらのヘッダーの情報として空のデータを返すのですが、Gnus
はそのときに使った XOVER コマンドが無効であると判断してしまい、
以後は代わりに HEAD コマンドを使ってヘッダーを取得しようとします
(これの犯人はぼくではありません ;-)。

一方、HEAD コマンドを使って取得したヘッダーをローカルにキャッシュ
する際に、ヘッダーに含まれている MIME エンコードされた語をデコー
ドしてはいけないのですが、ぼくが昨年 9月に導入した新機能の副作用
のために、From だけデコードしてしまうようになっていました。

[1] http://article.gmane.org/gmane.emacs.gnus.general/64807

以下のパッチを当てるのがもし面倒でしたら、そしてお使いのニュース
サーバーが XOVER コマンドをサポートすることが確実ならば、次の一
行で間に合わせることもでします。

(setq nntp-server-xover "XOVER")

--8<---------------cut here---------------start------------->8---
--- gnus-agent.el~ 2007-01-21 02:54:13 +0000
+++ gnus-agent.el 2007-06-14 10:51:54 +0000
@@ -1768,6 +1768,7 @@
(gnus-uncompress-range (gnus-active group))
(gnus-list-of-unread-articles group)))
(gnus-decode-encoded-word-function 'identity)
+ (gnus-decode-encoded-address-function 'identity)
(file (gnus-agent-article-name ".overview" group)))

(unless fetch-all
@@ -3571,6 +3572,7 @@
(save-excursion
(gnus-agent-create-buffer)
(let ((gnus-decode-encoded-word-function 'identity)
+ (gnus-decode-encoded-address-function 'identity)
(file (gnus-agent-article-name ".overview" group))
cached-articles uncached-articles)
(gnus-make-directory (nnheader-translate-file-chars
--- nntp.el~ 2007-03-01 23:41:53 +0000
+++ nntp.el 2007-06-14 10:51:54 +0000
@@ -1580,7 +1580,8 @@
;; article number. How... helpful.
(progn
(forward-line 1)
- (looking-at "[0-9]+\t...")) ; More text after number.
+ ;; More text after number, or a dot.
+ (looking-at "[0-9]+\t...\\|\\.\r?\n"))
(setq nntp-server-xover (car commands))))
(setq commands (cdr commands)))
;; If none of the commands worked, we disable XOVER.
--8<---------------cut here---------------end--------------->8---
--
山岡

0 new messages