[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: UTF-8 のプロセス呼び出しで文字化け



再送します。複数届いてしまったらすみません。

森下です。

後藤さん、ありがとうございます。

From: Shun-ichi GOTO (後藤俊一) <shunichi.goto@xxxxxxxxx>
Subject: Re: UTF-8 のプロセス呼び出しで文字化け
Date: Fri, 27 Jan 2006 03:19:27 +0900
Message-ID: <2288dbd90601261019y1964d3a7vd5d96a5b3e0f5fc@xxxxxxxxxxxxxx>

> On 1/27/06, Mimpei MORISHITA <mimpei@xxxxxxxxx> wrote:
> > call-process で utf-8 を使用したいのですが、文字化けしてしまいます。
> > 正しくは、どのようにすれば良いでしょうか。
> 
> 結論としては、現状では出来ないというのが答えではないかな。

がーん。

> ちょっと正確ではないですが、ずいぶん昔に (namazu関係だったか)EUCの
> 引数を与えようとして、同様の問題が議論された際に、結局Windowsの
> MBCSなAPIを使ってる以上は、Shift_JISで渡さないとよくない(8bit透過な
> わけではない)という結論だったように思います。
> 
> 今回の症状は"森下"をutf-8にしてそれをWindows APIがShift_JISとして
> 解釈すると、1バイト足りないので、それを補おうとするのか、ヘンな挙動を
> しちゃうんだと思います。

なるほど、、、

> オバカな回避方法の一つとしては、"森下"ではなく、最後にダミーのASCIIを
> 1文字入れて"森下@"等とするとうまくいったりします。そのダミーは何でも
> よいわけではなく、sjis2バイト目に使えるものでないとまずいでしょう、多分。
> ちなみにスペース(0x20)や数字はダメです。

ダミーに * を使えれば手抜きで当面しのげるんですけど、これでは化けてし
まいますね。

> コードページを切り替えて実行すればうまくいくかもしれないなぁと思い
> 安直にw32-ansi-code-page を 65001に束縛してみたけどだめだった。
> これは単にプロセス呼び出しの際にそれを利用していないだけだろうとは思うけど、
> その線で回避できる可能性はあるかも?。 > developers

期待してます。:-)

> で、森下さんのやろうとしてる目的によるのですが、コマンドライン引数に
> utf-8を渡す必要は本当にあるのですか?
> 上記の理由でmeadowからだけでなく、コマンドライン引数を正しく受け取れないため、
> たいていのプログラムは受け取れないしそのようなつくりにはなっていないと思います。

実際にやりたいことは、LDAP による日本語検索です。
# 部署から検索する場合、当方の環境には日本語レコードしかないので。
Cygwin 版 ldapsearch コマンドの引数に、検索条件を utf-8 で渡せば結果が
返ってくるというのは確認しています。

たとえば foo.txt に
森下*
と書いておいて、
$ ldapsearch -L -h server -b "dc=co, dc=jp" "(cn=`nkf -w foo.txt`)"
とやれば引けます。Shift_JIS ではダメですね。

mew-ldap.el からも、引数を utf-8 にすれば「森」は OK だが「森下」は NG
でした。

ちなみに、NTEmacs + Gnus + EUDC な人が、日本語で LDAP 検索できたよ、と
以前言っていたのですが、追試してもらったところ、やはり「森下*」だとダ
メで、「森*」なら大丈夫という結果になりました。

> そういうデータをコマンドによっては引数をファイル渡しできる(たとえばsvnやcvsの
> ログ文字列など)ものもあると思いますので、そういう回避は出来ないでしょうか。
> やりたいこと/目的を説明していただければ、代替案は出るかもと思います。

なるほど。
ldapsearch の場合、-f オプションでファイル内に検索条件を書けるようなので、
しばらくその線で逃げておこうかと思います。

IE や Firefox で ldap://server/ にアクセスすると、Outlook Express だか
の検索フォームが立ち上がって、ここでは日本語検索ができます。これをパケッ
トキャプチャすると、やはり LDAP でアクセスしているので、Windows だから
utf-8 を使えないということはなさそうです。素人目には、Meadow/NTEmacs
でもできそうなので、将来的には使えるようになることを期待しておきます。
# A 版ではなくて W 版の API を呼んでいるのかしらん。

-- 
もりした みんぺい