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

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



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

--
Shun-ichi GOTO (後藤俊一)