以下の 1 行目と 2 行目ではファイルに BOM が生成されず、3 行目では BOM が生成される理由がわかりましたか? UTF-16LE が正しいエンコーディング名であり、そのエンコーディングはファイルの先頭に BOM を自動的に作成しないと思いました。
new File("foo-wo-bom.txt").withPrintWriter("utf-16le") {it << "test"}
new File("foo-bom1.txt").withPrintWriter("UnicodeLittleUnmarked") {it << "test"}
new File("foo-bom.txt").withPrintWriter("UTF-16LE") {it << "test"}
別のサンプル
new File("foo-bom.txt").withPrintWriter("UTF-16LE") {it << "test"}
new File("foo-bom.txt").getBytes().each {System.out.format("%02x ", it)}
版画
ff fe 74 00 65 00 73 00 74 00
そしてJavaで
PrintWriter w = new PrintWriter("foo.txt","UTF-16LE");
w.print("test");
w.close();
FileInputStream r = new FileInputStream("foo.txt");
int c;
while ((c = r.read()) != -1) {
System.out.format("%02x ",c);
}
r.close();
版画
74 00 65 00 73 00 74 00
Java では BOM は作成されませんが、Groovy では BOM が作成されます。