いままで Shift_JIS で書いてきた Java のソースコードファイルをそろそろ UTF-8 に変換しようと思って。
ソースコードのファイルは事前にバックアップをとっておくのが大事。
ファイルの数がけっこう多いのでファイルをオープン出来る数を多めに 1024 に設定しておく。
$ ulimit -n
256
$ ulimit -n 1024
ファイル数が多いと「Too many open files」というエラーが発生するので注意。その際、何度もファイル変換をしたりしてぐちゃぐちゃになってしまう可能性が。。。
今回、作業する環境は Mac OS X Mavericks
$ uname -mrsv
Darwin 13.1.0 Darwin Kernel Version 13.1.0: Thu Jan 16 19:40:37 PST 2014; root:xnu-2422.90.20~2/RELEASE_X86_64 x86_64
bash のバージョンが 4 以上なら、**/* と指定することで再帰的にディレクトリを辿る globstar 機能が使えるが、この Mac OS X Mavericks では bash のバージョンが 3.2 だったので使えない。
そこで、この機能が使える zsh で nkf を使うことにする。
$ zsh
Shift_JIS から UTF-8 へちゃんと変換できるかチェック。
% nkf -Sw ./src/**/*.java | nkf --guess
UTF-8 (MIXED NL)
実際に変換する。
% nkf -Sw --overwrite ./src/**/*.java
改行コードを LF へ変換できるかチェック。
% nkf -Lu ./src/**/*.java | nkf --guess
UTF-8 (LF)
改行コードを LF へ統一。
% nkf -Lu --overwrite ./src/**/*.java
これで、無事に全部 UTF-8 + LF のファイルに変換できた。
参考までに nkf のヘルプ。
% nkf --help
Usage: nkf -[flags] [--] [in file] .. [out file for -O flag]
j/s/e/w Specify output encoding ISO-2022-JP, Shift_JIS, EUC-JP
UTF options is -w[8[0],{16,32}[{B,L}[0]]]
J/S/E/W Specify input encoding ISO-2022-JP, Shift_JIS, EUC-JP
UTF option is -W[8,[16,32][B,L]]
m[BQSN0] MIME decode [B:base64,Q:quoted,S:strict,N:nonstrict,0:no decode]
M[BQ] MIME encode [B:base64 Q:quoted]
f/F Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl
Z[0-4] Default/0: Convert JISX0208 Alphabet to ASCII
1: Kankaku to one space 2: to two spaces 3: HTML Entity
4: JISX0208 Katakana to JISX0201 Katakana
X,x Convert Halfwidth Katakana to Fullwidth or preserve it
O Output to File (DEFAULT 'nkf.out')
L[uwm] Line mode u:LF w:CRLF m:CR (DEFAULT noconversion)
--ic=<encoding> Specify the input encoding
--oc=<encoding> Specify the output encoding
--hiragana --katakana Hiragana/Katakana Conversion
--katakana-hiragana Converts each other
--{cap, url}-input Convert hex after ':' or '%'
--numchar-input Convert Unicode Character Reference
--fb-{skip, html, xml, perl, java, subchar}
Specify unassigned character's replacement
--in-place[=SUF] Overwrite original files
--overwrite[=SUF] Preserve timestamp of original files
-g --guess Guess the input code
-v --version Print the version
--help/-V Print this help / configuration
Network Kanji Filter Version 2.1.3 (2013-11-22)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2013, The nkf Project.
-
Ref.
- nkfを使って、ディレクトリ以下のファイルを「EUC-JP」⇒「UTF-8」に一括変換する。 - カサヒラボ
- nkfコマンドでファイルの文字コードと改行コードを変更する | Linuxで自宅サーバ構築
tags: nkf
Posted by NI-Lab. (@nilab)