原因是:
微软在自己的 UTF-8格式的文本文件之前加上了 EF BB BF三个字节 , windows上面的 notepad等程序就是根据这三个字节来确定一个文本文件是 ASCII的还是 UTF-8的 , 然而这个只是微软暗自作的标记 , 其它平台上并没有对UTF-8文本文件做个这样的标记。
引用:http://blog.csdn.net/dingxy/article/details/4465600
解决办法是
在文件流的开始输入new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF};
使用方式,如下:
FileOutputStream fos = new FileOutputStream(filePath);
fos.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF});
BufferedWriter bfWriter = new BufferedWriter(new OutputStreamWriter(fos,));
bfWriter.write(...); //...是其它信息
bfWriter.flush();
bfWriter.close();