[Mew-Win32 02806] Windows + euc-jp argument (was: [Mew-dist 14375] Re: b64)
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2000年 10月 5日 (木) 12:26:20 JST
白井です。
mew-dist でのα版の日本語 grep の話なんですが、いろいろと調べて
頭の中がクリアにはなったのですが、その割にはあんまり自信がないの
で、以下の説明が正しいかどうか見て貰えないでしょうか? > みなさま方
Mew-dist にいない人のための予備知識:
外部コマンド使って(日本語通したいなら mg や jgrep)、検索して、マー
クをつける機能が復活したのですが、そいつの動かし方が(日本語なら)
まず、pattern を (日本語だなと自動判定して) euc-jp で符号化する
=> "白井" なら "\307\362\260\346" ね。
で、以下のように call-process を動かす。
(let ((call-process-hook nil)
(coding-system-for-read 'raw-text
(coding-system-for-write 'raw-text-unix)))
(call-process "grep" option "\307\362\260\346" files))
という感じになっています。で、ためしたところ、"白井秀行" は検索
できるけど、"白井" は検索できないので、なんなんだろうと考えて、
現在は『Windows が悪い』と思っているところです。なお、この処理は
kazu> OS に依存している話ではないのだけれど。
ということだそうです。私も確かに最初はそう思ったのですが :-)
# 以下、mew-dist に送ろうと思って、ちょっととどまって添削して貰
# おうと思った内容。^^;;;
From: Hideyuki SHIRAI (白井秀行) <shirai at example.com> 曰く
Subject: [Mew-dist 14375] Re: b64
Message-ID: <20001004.124114.63231999.shirai at example.com>
Date: Wed, 4 Oct 2000 12:41:32 +0900
白井> という euc-jp で書いた shell script を作って、直接 "白井" や "白
白井> 井秀行" を書かせてみてもやっぱり "白井" はダメなので、今回の結論
白井> としては『M$-Windoze って :-<』となるのでした。
白井>
白井> # これって今まで知らなかったぞ。いつも "白井" で実験するから一発
白井> # 目でだめだったのかぁ。
私がまったく知らないので、SJIS の予備知識 (昔は kin kout だったな)。
SJIS> 4.1 JISコードの欠点
SJIS> JISコードは、2バイトコードの文字コードの中に1バイトコードが
SJIS> 文字コードの一部として含まれているため、そうしたコードが本
SJIS> 来の1バイトコードなのか、あるいは2バイトコードの一部なのか
SJIS> を区別するために、エスケープ コードを使ってコードの切り替え
SJIS> が必要であった。
SJIS> 4.2 シフトJISコードのアイディア
SJIS> こうした面倒を引き起こさずに、1バイトコードと2バイトコード
SJIS> を混在させるアイディアがシフトJISコードである。 そのアイディ
SJIS> アとは、2バイトコードの第1バイトにASCIIコードで文字として使
SJIS> われていない部分のコードを採用する というものである。その部
SJIS> 分が次の図の赤で示された個所である。
ここで、赤い部分は ASCIIコード表の
0x81 - 0x8e
0x90 - 0x9f
0xe0 - 0xfc
の範囲です。
# 上記は http://www.econ.hokkai-s-u.ac.jp/~smoto/ala/code/ から
# 引用しました。
## 0x80 以降を ASCIIコードといっている時点でまずいと思うけど。
## まぁ、それはおいといて。
"白井(euc-jp)" は "0xc7f2 b0e6" なのですが、引数として他のプログ
ラムに渡すときに、どうやらコマンドインタプリタは SJIS しか解釈し
ないようで『"e60a" ってなんか変』となり、おせっかいなことに
"0xc7f2 b00a" に引数を変換してしまうようです。
反対に "白胃" だと "0xc7f2 b0df 0a" で上記の赤い部分に入らないの
で、0xb0 => ーの半角、0xdf => 半濁音の半角 とみなし、無駄なこと
をやらないため、ちゃんと "白胃" になります。
# "山本" は "0xbbb3 cbdc 0a" だから大丈夫なんですね。
というわけで、再度の結論として『日本語に関していえば、EUC-JP で
引数を渡すという処理の可否は OS に依存する』ということになります。
--- mew-dist に送ろうと思ったメール終了 ---
でした。最初、Mule for Win32 とか Meadow がなんかやっているのか
な(_ _) と思ったのですが、WinXX の根幹の問題のようです。パッチに
するなら、以下の通りかな。
P.S.
ず〜〜と、経験的に『euc-jp で引数を渡すとまったく動かない』と思っ
ていたのだけど、これはまず最初に "白井" を試すからでした。ちゃん
と euc-jp を受け付けるコマンドなら大丈夫なのね(普通は :-)。
--
白井秀行 (mailto:shirai at example.com)
-------------- next part --------------
--- mew-win32.el.orig Thu Oct 5 11:33:08 2000
+++ mew-win32.el Thu Oct 5 11:39:53 2000
@@ -92,6 +92,21 @@
"/[^./]+$"
'script-process-argument-editing-function 'last)))
+
+;; Japanese grep
+(cond
+ ((mew-coding-system-p 'japanese-shift-jis-unix)
+ (mew-replace-with
+ mew-cs-database-for-encoding
+ '((ascii latin-jisx0201 japanese-jisx0208 japanese-jisx0208-1978)
+ iso-2022-jp "7bit" "B" nil japanese-shift-jis-unix)
+ '(ascii latin-jisx0201 japanese-jisx0208 japanese-jisx0208-1978)))
+ ((mew-coding-system-p '*sjis*unix)
+ (mew-replace-with
+ mew-cs-database-for-encoding
+ '((0 138 146 144) *iso-2022-jp* "7bit" "B" nil *sjis*unix)
+ '(0 138 146 144))))
+
;; common programs.
(setq mew-prog-shell shell-file-name)
Mew-win32 メーリングリストの案内