このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Tanaka's OSAXの不具合?

発言者:重松修
( Date Thursday, June 26, 1997 00:41:24 )


何時もお世話になっております。

以前より、ときどきTanaka's OSAXが不審な挙動をするのですが、あまり実害
がなかったので無視していましたが、ようやく原因が特定できましたので報告
いたします。

set mytxt to "白血病"
xReplace mytxt search "剣" replace "道"

上記のスクリプトを実行すると結果は"白血病"期待しますが、実際には、
剣が8C95、血病が8C8C9561で、"白兼ケa"(8C8C93B961)になります。

これは検索を行うときに2バイト文字の2バイト目であっても構わず検索を行ったり、
置換を行ったりすることに起因していることがわかりました。

set mytxt to "白血病"
xReplace mytxt search "a" replace "A"

結果 "白血柊"

将来的に対応が可能でしたら、是非とも2バイト対応をお願いいたします。


前薗 健一 さんからのコメント
( Thursday, June 26, 1997 02:55:55 )

Shift JIS の 1 byte, 2 byte の判定を行っていないために起こった
現象だと推測します。
C の判定コードでしたらありますよ。

田中求之 さんからのコメント
( Thursday, June 26, 1997 15:49:16 )

すでに前園さんからコメントがあるように、xReplace は漢字コードあるいは KeyScript
を考慮せずに、単純に文字列のサーチを行って置換する仕様になっています。このため、
重松さんがおっしゃったような現象が起こります。これは仕様です。

本来であれば、飯森さんの osax のように、KeyScript の指定を可能にして
操作する文字列をどの言語の文字列とみなすかを指定させたうえで、漢字コード
などの問題に対処するという仕様にするべきなのですが、面倒なのと、私の
使っているコンパイラが Script Manager がらみのコードをきちんとコンパ
イルできないようなので、今のような Quick & Dirty な仕様になってます。

確かに、2バイト文字の処理において細かい不具合が出る可能性があるのですが、
処理が、文字列のコード/言語に関係なく、単純な置換処理を行うという仕様に
なっていることによって、逆に多くの国の方に使ってもらっているという現状を
考えると、このままでいいかなと思っています (^_^;;

# おかげさまで、海外の方にも、けっこう使ってもらってます
…あれやこれやとリクエストも来て、断りのメール(英語)を書くのが面倒だと
いうので、カスタマイズバージョンをいくつも作っていたりする (^_^;;