[macOS General] File の mime-encoding を調べて変換する

コマンドラインでかんたんにすませたい。

file コマンドでエンコーディングを判別したが失敗した

file コマンドで分かるらしいので調べてみる。

% file -bI *
text/plain; charset=unknown-8bit
text/plain; charset=unknown-8bit
ERROR: line 22: regexec error 17, (illegal byte sequence); charset=unknown-8bit

うまくいかない。
Sublime Text で開いて確認したところ、SHIFT_JIS と表示されました。

iconv で変換してみる

JIS 関連の扱えるフォーマットを調べてみると、たくさん出てきた。。。

% iconv -l | grep JIS
ISO-IR-14 ISO646-JP JIS_C6220-1969-RO JP CSISO14JISC6220RO
JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA
ISO-IR-87 JIS0208 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 X0208 CSISO87JISX0208
ISO-IR-159 JIS_X0212 JIS_X0212-1990 JIS_X0212.1990-0 X0212 CSISO159JISX02121990
MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS
EUC-JISX0213
SHIFT_JISX0213

こんな形で変換できました。

% iconv -f SHIFT_JIS -t UTF-8 06.csv > 06.utf8

nkf を使えば auto detect して convert してくれた

どうも nkf をつかえば、入力を自動判別してくれるよう。

homebrew でインストールする。

% brew install nkf
==> Downloading http://dl.sourceforge.jp/nkf/59912/nkf-2.1.3.tar.gz
######################################################################## 100.0%
==> make CC=clang
==> make install prefix=/usr/local/Cellar/nkf/2.1.3 MKDIR=mkdir -p
  /usr/local/Cellar/nkf/2.1.3: 4 files, 348K, built in 7 seconds

実行します。

% nkf -w 06.csv > 06.utf8

xargs をつかって一括変換する

xargs をつかって、カレントディレクトリのファイルを一括で変換します。

% find . -name "*.csv" | xargs -n 10 nkf -w --overwrite
% file -bI *
text/plain; charset=utf-8
text/plain; charset=utf-8
ERROR: line 22: regexec error 17, (illegal byte sequence); charset=utf-8

楽できた!

補遺

file コマンドで mime-type の判定まわりで、正規表現がらみのエラーが出るのだろうか?
無視してもよいのかな。

ERROR: line 22: regexec error 17, (illegal byte sequence); charset=utf-8