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.csv.BOMfunction として入れた。
これらの使用方法は、 Wiki ページの中に簡単に書いた。
Home · yipuran/yipuran-csv Wiki · GitHub