荷という文字がgrepできないNo.38865
善太郎 さん 21/04/03 13:55
 
いつもお世話になります。

荷という文字が入っているテキストファイルをgrepしてヒットしません。
テキストファイルを秀丸で開いて検索文字に荷と設定して検索するとヒットします。
テキストファイルはUNICODEテキストファイルで、荷の文字コードはU+8377、SJISは0
x89D7です。
試しにShift-JISで保存しgrepするとヒットします。

制限でしょうか?

正規表現は使用していません。秀丸は64ビット版です。

[ ]
RE:38865 荷という文字がgrepできないNo.38866
秀丸担当 さん 21/04/05 09:01
 

荷という文字は、例えば「荷物」といったような並びになっていたらShift-JISとも
解釈可能なので、設定の組み合わせ次第では誤認識となる可能性があります。
Unicode(UTF-16)の「荷物」と、Shift-JISの「wナr」という文字列は、
77,83,69,72
というバイト列で、全く同じで、解釈次第でどちらともとれるものになります。

grepのダイアログで「エンコードの種類」を「Unicode(UTF-16)」を明示的に指定し
て実行すると確実です。

Unicode(UTF-16)のファイルだとしたら、一般的にはBOMを付けるので、ファイルにBO
Mが付いていてgrepで認識するようになっていれば誤認識はありません。
[その他]→[動作環境]で左下の「上級者向け設定」をONにして、
[その他]→[動作環境]→[ファイル]→[エンコード1]に「UnicodeのBOMを認識」がON
になっている必要があります。(標準ではONです)

ファイルのほうは、ファイルを開いたときに[ファイル]→[エンコードの種類]→[BO
M]にチェックが入っていればBOM付きのファイルです。
無ければONにしてから上書き保存するか、名前を付けて保存のダイアログで、「BOM
を付ける」をONにしてUnicode(UTF-16)で保存すると付きます。
BOMがある場合はファイル先頭にバイナリでFF,FEという2バイトが付きます。秀丸エ
ディタのバイナリモードで読み込んで確認できます。

他の関連しそうなこととしては、[その他]→[動作環境]→[検索]→[grepの動作]で、
「隠しファイルを除外」「バイナリと思わしきファイルを除外」「指定した拡張子や
名前を除外」などのオプションがONになっていたら除外されているかもしれないので、
OFFにしてみるといいです。


[ ]
RE:38866 荷という文字がgrepできないNo.38867
善太郎 さん 21/04/06 10:41
 
返信ありがとうございます。

>grepのダイアログで「エンコードの種類」を「Unicode(UTF-16)」を明示的に指定し
>て実行すると確実です。

検索はされましたが、バイナリの検索(?)もされたようで文字化けの結果となりま
した。
なので、grepの動作で「バイナリと思わしきファイルを除外」を付けて検索したとこ
ろ目的の結果が得られました。
ありがとうございます。

[ ]
RE:38867 荷という文字がgrepできないNo.38868
秀丸担当 さん 21/04/07 09:13
 

「Unicode(UTF-16)」を明示的に指定した場合は、例えばShift-JISのファイルなど他
のファイルも無理矢理UTF-16として読み込むので、たまたまバイト列として一致すれ
ば無理矢理読み込んだ結果、文字化けになって見える可能性はあります。
ですが、「バイナリと思わしきファイルを除外」としたら大丈夫ということで、Shif
t-JIS等を無理矢理読んだ結果ではなくて、本当にテキストファイルではないファイ
ルだったのだと思います。

目的のUTF-16のファイルは、おそらくBOMなしのファイルということかと思います。
この場合、[その他]→[動作環境]→[ファイル]→[エンコード1]の自動認識するもの
に「Unicode(UTF-16)」のチェックが入っていたらできることにはなっているのです
が、試してみたところ精度がいまいちでした。
UTF-16(BOMなし)はファイルサイズが偶数だとだいたい一致してしまうので、ある程
度実用に合うように絞る必要があるのですが、改行コードの具合とかをみて改善しよ
うと思います。
もしファイルにBOMを付けていいのであれば、BOMありにすることをお勧めします。

[ ]