Windows で複数のデータファイル (csv) を連結して,Byte Order Mark をつけたい [memo]
先日,システムから吐かれた複数の UTF-8 データファイルを連結して,BOM (バイトオーダーマーク) をつけなければならない場面に遭遇しました.
UN*X のコマンドラインが使えれば良いのですが,残念ながら作業環境が Windows に限定されている場合の備忘録です.
【前準備 (1度だけ) - nkf のインストール】
以下から Windows 用のバイナリをダウンロード.
http://www.vector.co.jp/soft/win95/util/se295331.html
nkf32.dll を windows/system32 へコピー.
win32 (98,Me,NT,2000,XP,Vista,7) Windows-31J/nkf32.exe を nkf.exe にリネームして,実行パスへ置く (これも windows/system32 で良いでしょう).
【複数の csv ファイルを1つに連結】
これは Windows 標準のコマンドで可能です.
type *.csv > output
最終形態を csv にしたい場合でも,output.csv みたいなファイル名で書き出そうとすると "*.csv" で拾われてしまうので,単に "output" にしています.
【 BOM 付与】
nkf -w8 --overwirte output
ちなみに,BOM を取り除く場合のオプションは -w80 です.
最後に,適当につけたファイル名 (output) を変更して終了.
ちなみに…
Windows 標準のメモ帳は勝手に BOM をつけてくれるので,単に BOM が無い為にエクセルとかで開くと文字化けする UTF-8 ファイルを何とかしたい場合は,わざわざ nkf をインストールしなくても,「メモ帳で開いて保存するだけ」で OK.
あと,避けられるのであれば,本来 UTF-8 に BOM はつけない方が良いそうです.