要明白,用filewriter读取文件采取的是平台默认编码(视 *** 作系统而定)。当要写入的文本文件编码和平台默认编码不一致时,就会出现中文乱码的情况。这时可以使用filewriter 的父类OutputStreamWriter来读取。OutputStreamWriter允许用户指定编码方式,代码为:
FileInputStream fis=new FileInputStream("文件路径");
OutputStreamWriter osw=new OutputStreamWriter(fis,"文本文件的编码方式(ANSI,UTF-8...)")
osw.write()
这样写入的编码可以保证和源文本文件编码一致,就不会出现乱码了。
文件写入的时候有中文就很容易出现乱码,通常获取到的文件中通常都是“iso8859-1”格式,需要转换为“UTF-8”格式。如:String str = new String(str.getByte("iso8859-1"),"UTF-8")进行下强制转换后在进行存储即可。
备注:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。
原因是写入时使用的字符编码和期望的不一致导致的,因为JVM虚拟机启动时会因不同的参数使用不同的缺省字符编码。解决办法:
如果你期望写到文件中的汉字是 GBK编码,可以:
1、写文件时,将字符串准换成 GBK编码的byte[], 如: myios.write( "汉字".getBytes("GBK"))
2、java 虚拟机启动时,增加 -DFile.encode=GBK 选项。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)