文字コードをフォルダごと調べたり、まとめて変換したりする方法


nkfを使い、フォルダごとUTF-8からEUC-jpへ文字コードを変換したりする方法を説明します。

文字コード変換用のnkfコマンドをインストール

まずは文字コードを変換するためのnkf (Network Kanji Filter)をインストールします。

command

$ brew install nkf

brew installはHomebrewでパッケージをインストールするコマンドです。(なのでHomebrew入れといてください...)
成功すると下記の様な結果が出てきます。

command

==> 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 14 seconds

フォルダ内のファイルの文字コードがどのように変換されるか調べる。

文字コードを調べたいフォルダに移動して、下記のコマンドを入力します。

command

$ nkf -We **/*.php | nkf --guess
EUC-JP (LF)

-WはUTF-8と仮定して処理する。
-eはEUCコードに変換する。という意味です。
→大文字が仮定して処理、小文字が変換する処理と覚えておきましょう。

**/*.phpは、再帰的に「.php」というファイルを探すというコマンドです。他のファイルにも適用できます。たとえば、「.inc」ファイルも一緒に調べたいときは**/*.php.incと記述します。

nkf --guessはファイルの文字コードを特定できるコマンドです。上記の例だと「EUC-JP (LF)」という変換の予測がでています。文字コードの変換が失敗していると「BINARY」という表示がでてきます。

※nkfコマンドの一覧はこちら↓
Linuxコマンド集 - 【 nkf 】 文字コードを変換する:ITpro

「UTF-8」→「EUC-JP」に変換する。

上記のコマンドでうまく処理できると予測ができたら、
下記のコマンドで上書きします。

command
$ nkf -We --overwrite **/*.php

--overwiteは文字通り、上書きするというコマンドです。

もし指定したディレクトリ以下のファイルがちゃんと変換されているか調べたかったら、下記のコマンドを入力。

command
nkf --guess **/*.php

入力すると、こんな感じでファイルごとの文字コードが判定されます。

command
index.php: EUC-JP (LF)
01/index.php: EUC-JP (LF)
02/index.php: EUC-JP (LF)
03/index.php: EUC-JP (LF)
04/index.php: EUC-JP (LF)
05/index.php: EUC-JP (LF)

参考サイト

[文字コード変換]nkfコマンドのインストール | 本日も乙
nkfを使って、ディレクトリ以下のファイルを「EUC-JP」⇒「UTF-8」に一括変換する。 - カサヒラボ
テキストファイルの文字コードを調べるには(nkf編) - @IT