Java IO读写中文各种乱码问题 【转】

java

Java IO读写中文各种乱码问题

java.io.*读写中文各种乱码,很费劲。不完全解决方法如下:

对于Reader,直接使用Reader系列读取中文会乱码,需要先生成InputStream,再通过InputStreamReader转换为Reader,同时设定编码,才能避免乱码。如

   FileInputStream fis = new FileInputStream("D:/a.txt");

   BufferedReader

br = new BufferedReader(new

InputStreamReader(fis,"gb2312"));

 

对于RandomAccessFile,直接用RandomAccessFile去写中文的时候会有乱码,要这样使用写才没有乱码。

RandomAccessFile raf

= new RandomAccessFile("D:/c.txt","rw");

raf.seek(raf.length());//从文件尾部写

raf.write("我勒个去".getBytes("UTF-8"));//UTF-8或者gbk以打开的文件的实际编码为准。这个是文本文件是UTF-8编码时

raf.write("我勒个去".getBytes("gbk"));//这个是文本文件是gbk编码时

 

而RandomAccessFile的readLine方法读的时候,居然又变成了用8859_1编码读……不可思议啊。使用String的getByte和构造方法转换。

   RandomAccessFile

raf = new

RandomAccessFile("D:/cc.txt","rw"); //源文件是Gbk编码

   String l =

raf.readLine();

//这会按照8859_1读   

   l = new

String(l.getBytes("8859_1"),"gbk");

//将8859_1转成Gbk。如果源文件是utf-8,这儿就改成utf-8

 

另外发现几个类有转码的功能

PrintWriter(String

filename, String csn);//PrintWriter的构造函数可以选择编码(Csn:charset

name),csn可以是"UTF-8"或者"gbk"

"字符串".getBytes("UTF-8");

//String字符串在转为Byte[]时可以按指定编码转

new String(byte[] b,

String csn); //这个可以将byte[]编码转换

 

System.out.print(Charset.defaultCharset());

//可以显示系统当前默认编码是什么。默认编码会作为程序中各种编码使用

以上是 Java IO读写中文各种乱码问题 【转】 的全部内容, 来源链接: utcz.com/z/391066.html

回到顶部