コメント |
|
|
> Vine 4.0 で a2ps を使って日本語を含むファイルを ps に変換すると、日本語部
> 分がどうも変になります。
(すみません。本文書く前に送信してしまいました。)
上記に付いて、出力された ps ファイルを見てみると、
どうも日本語の部分で、2byte 出力されるべきところが、
下位1byteのみ出力されているように見えます。
例えば、
This is a test.
これはテストです。
とだけかかれたファイルを変換した場合、Vine 3.2CR の a2ps と Vine 4.0 の a2ps で変換した物どうしを
比べると、以下のような違いがあります。
違いは、(This is a test.) の次の行の () の中で、byte 数が半分になっています。
また、上(Vine 3.2CR のもの) のbyte列のうち1つおきのデータが下(Vine 4.0)のbyte列に現れます。
おそらく、入力か出力のところで、上位byteが落ちていると思うのですが、これ以上の原因追求はできませんでした。
なお、環境変数は、LANG=ja_JP.eucJP としてあり、また、--encoding euc-jp を付けても同じ現象が起きます。
また、Vine 3.2CR のa2psのバイナリをVine4.0に持ってきて動かしても、やはり日本語が化けます。
逆にVine4.0のバイナリをVine3.2に持っていくと、ちゃんと表示されます。
なんとなく、ライブラリがおかしい気がするのですが、ちょっとわかりません。
----------------------------------------------------------------------------------------------
% diff -patch foo.txt.v3.ps foo.txt.v4.ps
*** foo.txt.v3.ps 2006-12-11 22:46:11.000000000 +0900
--- foo.txt.v4.ps 2006-12-11 22:45:46.000000000 +0900
*** 770,781 ****
/y0 y v get bfs th add sub store
x0 y0 moveto
(This is a test.) p n
! (\244\263\244\354\244\317\245\306\245\271\245\310\244\307\244\271\241\243) N
! (stdin) (1/1 \245\332\241\274\245\270) (06\307\257 12\267\35611\306\374 22:40) title
border
grestore
--- 770,781 ----
/y0 y v get bfs th add sub store
x0 y0 moveto
(This is a test.) p n
! (\263\354\317\306\271\310\307\271\243) N
! (foo.txt) (1/1 \245\332\241\274\245\270) (06\307\257 12\267\35611\306\374 22:45) title
border
grestore |
|
|
|
私も a2ps はたまに使うのでテストしてみましたが、特に問題は見られませんでした。
a2ps は、
# apt-get update
# apt-get install a2ps
で入れました。(psutils なども一緒に入りました。)
$ cat foo.txt
This is a test.
これはテストです。
$ file foo.txt
foo.txt: EUC text
$ a2ps foo.txt > foo.ps
[foo.txt (プレーン): 1ページ, 1シート]
[合計: 1ページ, 1シート] 標準出力へ転送します
$ cat foo.ps (からの抜粋)
(This is a test.) p n
(\244\263\244\354\244\317\245\306\245\271\245\310\244\307\244\271\241\243) N
となりました。evince で見ても化けていません。
参考のため foo.ps を添付します。
というわけで、必ず出る症状というわけではないのではないでしょうか。
私の環境は、
CPU は Pentium M 1.4GHz。
Vine 4.0 を CD からクリーンインストール。
言語関係は日本語を選択。
インストールクラスはデスクトップで、パッケージは TeX など使う予定のないものを除外。
シェルは bash。
環境変数などは Vine デフォルトに多少追加した程度。(削除や上書きはないつもり)
$ uname -a
Linux hoge.localdomain 2.6.16-0vl60 0000001 SMP Fri Oct 27 03:39:46 JST 2006 i686 i686 i386 GNU/Linux
です。
症状を再現させる条件として何か思い当たることはありませんか?
--
森口 |
|
|
|
> 症状を再現させる条件として何か思い当たることはありませんか?
返事が遅くなりました。
たしかにインストールした素の状態で、a2ps のみ install するとうまくいきました。
ただ、添付したsynaptic の設定ファイルで指定されたパッケージ群をインストールすると
文字化けを起こすようになります。
この設定ファイルにはできるだけ欲張ってインストールするよう、コンフリクトしない限り多くのパッケージを指定してあります。(なので問題が起きている?)
ただ、インストール中には特にワーニングは出ていないようです。
これまでの現象から、なにかしら shared library が置き換わってしまっているようと想定して、
現在、怪しそうなパッケージを1つづつインストールしてみて、いつ文字化けが起きるかを見てみているのですが、数が多すぎてうまくいっていません。
なにか有効な方法などあるのでしょうか? |
|
|
|
> たしかにインストールした素の状態で、a2ps のみ install するとうまくいきま
> した。
> ただ、添付したsynaptic の設定ファイルで指定されたパッケージ群をインストー
> ルすると
> 文字化けを起こすようになります。
症状再現できました。
libsafe が入っていると起こります。
何をどう直すべきなのかまではわかりません。
--
森口 |
|
|
|
> 症状再現できました。
> libsafe が入っていると起こります。
>
> 何をどう直すべきなのかまではわかりません。
正しい対処法ではないのですが、私の環境(一般ユーザIDでも root ID でも) では
少なくとも LD_PRELOAD という環境変数に /lib/libsafe.so.2.0.16 という値が入っています。
これを、外して a2ps を実行するとうまくいきます。具体的には、
env LD_PRELOAD= a2ps
とすると、ちゃんと日本語も変換できました。
なぜ LD_PRELOAD がセットされているのか、libsafe が入っているとなぜダメなのか、
それはまだわかりません。 |
|
|
|
> なぜ LD_PRELOAD がセットされているのか、libsafe が入っているとなぜダメな
> のか、
> それはまだわかりません。
LD_PRELOAD は、libsafe に含まれる /etc/profile.d/libsafe.sh (or .chs)
によりセットされているようです。
少し調べてみたものの、「libsafe が入っていると a2ps で化ける」理由
までは分かりませんでした。
現状では「a2ps で日本語を扱う場合は libsafe をインストールしない」
というのが現実的な対応だと思います。(バッドノウハウ的でいやですが…)
今後の参考のためにも、保留として残しておきます。 |
|