Java で操作するUTF-8エンコードのCSVに BOMを付ける。

CSV文字コードは、「SJISで作成」と、たいていのシステム、プロジェクトは今までそうしてきたであろう。
しかし、UTF-8でも、BOM付きにすれば、Microsoft Excel でも開いて文字化けしないで済む。
昔と違ってメジャーのテキストエディタは、UTF-8 BOM 有りで保存もできるはずだ。
システムの都合で、どうしても UTF-8 のCSVにしたいなんてこともあるが、Excelで作成したCSVを
プログラム側が読む為に、SJIS対応にしてきた。
それでも、どうしても UTF-8 のCSVにしたいと訳のわからんプロジェクトは世の中には存在するもので、
Java で、UTF-8エンコードのCSVに BOMを付ける。BOM付を読む。というのを考えた。

BOMを付ける
java.io.OutputStream に、BOM の3バイト EF , BB , BF を出力してからCSV BODYを出力するということで、

public static void push(OutputStream out) throws IOException{
	out.write(new byte[]{ (byte)0xef,(byte)0xbb, (byte)0xbf });
}

というメソッドで対応する。
BOM付を読む
読み込む Reader インターフェースから取得する文字列に対して、以下の原始的メソッドで充分、

public static String chop(String str){
   byte[] b = str.getBytes();
   if (b.length < 3) return str;
   if (b[0] != -17 || b[1] != -69 || b[2] != -65) return str;
   byte[] n = new byte[b.length-3];
   for(int i=0,k=3; i < n.length;i++, k++){
     n[0] = b[k];
   }
   return new String(n);
}

これらは、自分が作ったフレームワークの中に、org.yipuran.util.BOMfunction として入れた。
書込み時の使用方法は、↓の Wiki ページの中に書いた。
csvwrite · yipuran/yipuran-core Wiki · GitHub
読込み時の使用方法は、↓の Wiki ページの中に書いた。
csvread · yipuran/yipuran-core Wiki · GitHub
CSVキーヘッダ無しの読込みだけは、自分でどうしても 上に書いた原始的なメソッドを
直接 call しなくてはならないのは仕方がない。

時間も取れず、作成したフレームワークについて Wiki 全て書き込めてるわけではない。