Saturday, July 26, 2014

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 はつけない方が良いそうです.


0 comments: