22
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VS Codeでgrepしようとしたら文字コードでつまった

Last updated at Posted at 2019-06-12

環境

  • Windows 10
  • VS Code v1.35.0

概要

Ctrl + Shift + Fでワークスペースにあるファイルの文字検索、置換が行える。正規表現も使えるし、とても重宝していた。
しかし、デフォルト設定ままの場合、文字コードがUTF-8のファイルしかひっかからず、Shift-JISやEUC-JPが文字コードのファイルは抜け漏れてしまう。

どういうこと?

別々の文字コードを使った同じ文字列のファイルを3個用意して...
origin.PNG

日本語の「チト」で検索してみる。
3file.PNG
引っかかるじゃん!とおもったけど...

UTF-8とEUC-JPのファイルを閉じて再度検索してみると、
single.PNG
EUC-JPでひっかからなくなった。

なんで?

検索するときエンコードを自動的に判別しない問題

ここにすべてが書いてあった。
どうやら設定がデフォルトだと、全てのファイルの文字コードをUTF-8として開き、grepしているために引っかからない...とのことである。
だが、検索するとき文字コードを自動的に判別しないだけで、エディタでそのファイルの適切な文字コードで開けている状態であれば、UTF-8でなくても検索にはひっかかるようだ。上の例では、EUC-JPのファイルは、閉じて文字コードを指定しなかったためにUTF-8としてgrepし、ひっかからなかったが、Shift-JISのファイルはエディタ上でしっかりとShift-JISで指定してあげていたので、ひっかかった。

(基本的に半角アルファベットであれば、文字化けを起こすことはないので、grepに問題はないはず。)
eng.PNG

対策

日本語をgrepしたいときには、引っかからないので、どうにかして検索する。

VS Codeでどうにかする

拡張子別には文字コードを指定できるようだけど、ファイルの量が膨大かつ、拡張子が同じでも文字コードが違うこともある環境だったのでそういうわけにはいかなかった。
今のところ、VS Codeで他ファイルと文字コードが異なるファイルをすべて開いて指定してあげるか、拡張子別に文字コードを指定するのを拡張子の数だけgrepする方法以外思いつかない。
ファイル数が少ない場合のみ有効。
面倒だし『VS Codeでどうにかする』のは正直オススメしない。

VS Codeだけで完結するなにか良い方法があれば教えてください。

あきらめて他ツールでどうにかする

###TresGrep
http://hp.vector.co.jp/authors/VA055804/TresGrep/
文字コードが異なっていても問題なくgrepできた。

感想

grepするときだけ別のソフトを開くのもなんかバカバカしいので、複数の文字コードがあっても検索できるようになってほしい。

過去の作業に不備のあった可能性が...
絶望と仲良く

22
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?