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

[debian-users:46381] Re: Manpage encoding: UTF-8 or EUC-JP?



こんにちは,

> > > DocBook/XML で書かれたドキュメントから日本語 manpage を吐く、
> > > Aptitude の manpage 生成系をいじっています。
> > > 変換自体は出力エンコーディングが UTF-8 でも EUC-JP でもうまくいくのですが、
> > > 自分の環境 (sarge) では、ロケールが ja_JP.EUC-JP でも ja_JP.UTF-8 でも
> > > UTF-8 の manpage はうまく表示されません。
> > 
> > man -Tnippon -l XXXX.X.X
> > man -Tutf8 -l XXXX.X.X
> > あたりで確認してみるとどうですか?
> 
> すみません。ちょっと確認方法がまずく、
> ロケールが ja_JP.UTF-8 の場合はうまく表示されることがわかりました。
> 他方で、EUC-JP 環境においてはうまく表示できません。
> 次のように、上川さんに提案されたオプションをつけてみても、
> 結果に変化はないようです。
> 
> * LANG=ja_JP.EUC-JP → 文字化け
> * LANG=ja_JP.EUC-JP + -Tnippon → 文字化け
> * LANG=ja_JP.EUC-JP + -Tutf8 → 文字化け
> * LANG=ja_JP.UTF-8 → UTF-8 で出力

これ,手もとで文字化けしました.正確なコマンドラインはどうしていますか?

> * LANG=ja_JP.UTF-8 + -Tnippon → UTF-8 で出力
> * LANG=ja_JP.UTF-8 + -Tutf8 → UTF-8 で出力
> 
> ……ということは、manpage のエンコーディングが UTF-8 の場合、
> とりあえずロケールが ja_JP.UTF-8 の場合は表示できるようですね。
> Aptitude の manpage に関しては他言語と同様 UTF-8 でいこうと思います。
> しかし他方で、
> ja_JP.EUC-JP の場合に表示できないのはやはり問題のような気もします。

man-db の 2.4.0-1 の changelog とか,
src/encodings.c を見ていると:

1. どんなlocaleであっても, jaの場合は,EUC-JP がソースエンコーディングで
あることを前提としている.

directory_entry:
        { "ja",         "EUC-JP",       "EUC-JP"                }, /* Japanese */

2. UTF-8 manpage をおくのであれば,/usr/share/man/ja_JP.UTF-8/manX
 (ピリオドがあり,その後にcharset情報がついている場合は special-case している)

char *get_page_encoding (const char *lang)
(snip)
        dot = strchr (lang, '.');
        if (dot)
                return xstrndup (dot + 1, strcspn (dot + 1, ",@"));


ということがわかりました.こうなっていなかったらおそらくバグです.

ソース中のコメントで例として下記が書いてあります:

 *   /usr/share/man/ja_JP.EUC-JP, locale ja_JP.UTF-8
 *     page encoding = EUC-JP
 *     source encoding = EUC-JP
 *     roff encoding = UTF-8
 *     output encoding = UTF-8
 *     EUC-JP -> iconv -> UTF-8 -> groff -Tutf8 -> UTF-8


上川
-- 
dancer@{debian.org,netfort.gr.jp}   Debian Project