您的位置:首页 > 移动开发 > Android开发

Java(Android)写文件时指定编码格式的问题

2013-12-18 19:25 465 查看
在写入一个新文件时,有时需要明确指定新文件的编码格式,如果是使用OutputStreamWriter(OutputStream
out,
String enc)这个函数写入文件,

则要指定正确的encode string。对于要指定unicode编码格式,需要注意如下事情:

 

OutputStreamWriter osw = new OutputStreamWriter(fos, "unicode");

这样生成的文件编码格式是Unicode big endian,而不是期望中的Unicode little endian,这似乎有些变态阿~

要生成编码格式为Unicode little endian的文件,需要指定为“x-UTF-16LE-BOM”,即:

OutputStreamWriter osw = new OutputStreamWriter(fos, "x-UTF-16LE-BOM");

 

如果要写成

OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-16LE");

得到的文件编码可能是"utf-8"的。

 

那么,此处“String enc“这个参数到底可以传入哪些字符串呢?已知的如下:

"UTF-8" : UTF-8编码

"x-UTF-16LE-BOM" : Unicode little endian编码

"Unicode": Unicode big endian编码

"GBK": ANSI编码

如果哪位知道的更详细,或者知道去哪个文档中找此函数的参数值还请不吝赐教


 

还有一种方法好像更直接(手动写入对应的BOM信息):

OutputStreamWriter fos = new OutputStreamWriter(new FileOutputStream(new File("myTestWriteFile.txt")), "UTF-16LE");

fos.write(0xFEFF);

fos.write("test 测试");

fos.flush();

fos.close();

 

写入文件的代码片段(参考):

try { 

    FileOutputStream fos = new FileOutputStream(fileName);

   OutputStreamWriter osw = new OutputStreamWriter(fos, "unicode");

   BufferedWriter bw = new BufferedWriter(osw);

   bw.write(...);

   bw.flush();

   bw.close();

   osw.close();

   fos.close();

} catch (Exception e) {  

    e.printStackTrace();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息