grepの動作がおかしいNo.28153
はっく さん 10/05/01 05:26
 
はじめまして。はっく と申します。

秀丸エディタをもう10年以上使用しております。購入当時はこれほど長い付き合い
になるとも思っておらず、ちょっと高いかとか考えたのが嘘のようです。

今回、パソコンのOSをWindows xpから、Windows 7にしたのですが、Windows 7で使用
するために秀丸エディタを4.19から8.00に入れ換えました。

そこで気づいたのですが、動作環境の上級者向け設定にある、エンコード1の設定項
目で、ファイルの内容を解析してエンコードの種類を自動認識する、の「Unicode(UT
F-16)」のチェックを外して、かつ「UnicodeのBOMを認識」のチェックを外している
と、grepの動作がおかしくなるようです。

これまで使っていたマクロが動かなかったため、いろいろ調べてみたところ、どうや
ら被検索文字列がDLLに対してUTF-16で送信されているために、検索文字列のASCII文
字列と一致しなくなってしまうようです。
たとえば、 ABCDEF から CDE を検索すると、(\0)A(\0)B(\0)C(\0)D(\0)E となって
しまい、NULL文字(\0)がスペース( )に置き換えられて" A B C D E"となります。結
果、一致しなくなるようです。
もちろん、" C D E"を検索すると一致します。

ちなみに、Windowsのメールファイルである、emlファイルを大量にくっつけたファイ
ルから特定のヘッダを検索するマクロですから、元のファイルがUTF-16ということは
ありません。ASCIIかJIS、またはそれ以外のASCIIベースのエンコードです。

フォーラムの書き込みや、フォーラムの過去ログもいろいろと調べてみたのですが、
探し方が悪いのかぜんぜんみつからず、4〜5時間悩んでしまいました。

ともかく、とりあえず報告いたします。よろしくおねがいします。

[ ]
RE:28153 grepの動作がおかしい(追記)No.28155
はっく さん 10/05/01 05:37
 
動作がおかしくなる必要条件がまだありましたので追記します。

先の設定の状態で、かつ 編集して保存せずに「(更新)となっている状態」で、
「localgrep」を行ったケースです。
もちろん、マクロで「localgrep」する代わりに、ダイアログから「(現在の内容)
にgrep」しても同じになります。

よろしくおねがいします。
 
 

[ ]
RE:28155 grepの動作がおかしい(追記)No.28157
秀まるお2 さん 10/05/01 14:59
 
 とりあえず僕の方で今確認したら、たしかに再現しました。たぶんバグだと思
います。

 連休が終わったらまた改めて、秀丸担当の方で詳しく調べてお返事させていた
だきます。

[ ]
RE:28155 grepの動作がおかしい(追記)No.28177
秀丸担当 さん 10/05/06 09:23
 

>そこで気づいたのですが、動作環境の上級者向け設定にある、エンコード1の
>設定項目で、ファイルの内容を解析してエンコードの種類を自動認識する、の
>「Unicode(UTF-16)」のチェックを外して、かつ「UnicodeのBOMを認識」のチ
>ェックを外していると、grepの動作がおかしくなるようです。

ご報告ありがとうございます。
ご指摘の通りの手順で問題を確認することができました。
V7のときに(現在の内容)でのgrepのUnicode対応をしたときからおかしかったよ
うです。
編集している場合は一時ファイルを作るのですが、一時ファイルがBOM付きのフ
ァイルで作られていて、BOMの存在に依存してしまっていました。
大変詳しいご報告内容で、助かりました。
V8.01で修正させていただきます。

[ ]