配属先研究室の端末Emacsのマニュアルコマンドの文字化けが気持ち悪い ので、文字コードにはあまり知識がないけど、ない脳みそこねこね考えて みる。あれはDebianだっかかな。 manプロセス側でなく、なるべくEmacs側で処理出来るようにするのが目的です。 --- うちのubuntu環境の文字コードは標準でUTF-8 (getenv "LANG") ; "ja_JP.UTF-8" default-process-coding-system ; (mule-utf-8 . mule-utf-8) locale-coding-system ; utf-8 (1) manプロセスが処理した文字列をそのまま表示すると(つまりエスケー プシーケンス処理しない)と、こんな感じ。 (shell-command "man man") または M-x: shell-command[RET] man --- MAN(1) Manual pager utils MAN(1) \345\220名\345\211前 man - オンラインリファレンスマニュアルのインターフェース \346\233書\345\274式 man [-c|-w|-tZT device] [-adhu7V] [-m system[,...]] [-L locale] [-p string] [-M path] [-P pager] [-r prompt] [-S list] [-e extension] [[section] page ...] ... man -l [-7] [-tZT device] [-p string] [-P pager] [-r prompt] file ... man -k [apropos options] regexp ... man -f [whatis options] page ... --- (2) 一方、Emacsのmanコマンドを介すると、こんな感じ。 文字化け悪化 (man "man") または M-x: man[RET] man --- MAN(1) Manual pager utils MAN(1) \345\220\345\220\215-\345\211\345\211\215- man - \343\202�\203潟\203�\202ゃ\203潟\203�\203\225\343\202<\203�\203潟\202鴻\203\236\343\203\213\343\203ャ\202≪\203�\201�\202ゃ\203潟\203帥\203若\203\225\343\202с\203若\202\271 \346\233\346\233後弱\274\217 man [-c|-w|-tZT device] [-adhu7V] [-m system[,...]] [-L locale] [-p string] [-M path] [-P pager] [-r prompt] [-S list] [-e extension] [[section] page ...] ... man -l [-7] [-tZT device] [-p string] [-P pager] [-r prompt] file ... man -k [apropos options] regexp ... man -f [whatis options] page ... --- ここでEmacsの文字のエンコード、デコード関数を使ってみる。 伝統的なLinuxならば文字コードはeuc-jpだろう。 (encode-coding-string "書式" 'euc-jp) ; "\275\361\274\260" (encode-coding-string "書式" 'utf-8) ; "\346\233\270\345\274\217" UTF-8エンコードした文字列の方が(1)の"書式"の文字付近のものと一致し ている気がする。 --- 自分の仮定が正しければマニュアル自体はUTF-8で通っていると思う。 問題なのは、 Emacsはmanプロセスと通信してバッファにその文字列をUTF-8で流してい る。が、その文字列にはエスケープシーケンスも含まれていて、【本来日本 語文字になるはずのバイト列とマニュアル整形のためのエスケープシーケ ンスが運悪く被ってしまっているのではないか?】 だから、Emacsのman関数側が処理の時にバイト列を解釈できずに文字化け するのかもしれない。 自信ないがここまで書いた。一旦寝て後で考え直そう。 またEmacs改悪の悪い癖がでてきたなあ…
2009年4月16日木曜日
参考にならないmanコマンドの文字化けについてのメモ
登録:
コメントの投稿 (Atom)
M-x woman しましょう。
返信削除womanの 存在をすっかり忘れてました…
返信削除これなら外部プロセスを使わないので、その辺無駄に文字コードに悩まされずに済みそうですね。
コメントありがとうございます。