赞
踩
我们平常可能会遇到这样的问题,我们在以前用字节流字符流保存的时候字符编码都是默认按系统的编码保存的,我们的电脑
是GBK简体中文,但有时候我们需要别的字符编码,像UTF-8,这时候读取的文件就可能是乱码了。
这时候,IO的转换流就派上用场了。
两个新的IO流类,OutStreamWriter和InputStreamReader,看名字就知道了,一个是写入,一个是读取了。
下面来说写入,代码:
- public static void utfSet()throws IOException {
- FileOutputStream fos = new FileOutputStream("f:\\a\\aa.txt");
- OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
- osw.write("你好?");
- osw.close();
- }
关键的就是这两句:
- FileOutputStream fos = new FileOutputStream("f:\\a\\aa.txt");
- OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
先建立FileOutStream对象,然后当做参数,在OutputStreamWriter的构造参数传进去,并设置需要的编码。默认是GBK。
在main()函数调用即可。
注意:在gbk中一个汉字是两个字节,但在utf-8中是3个字节,所以我们可以看文本大小就可以知道是什么编码,这里我们设置的是utf-8的,两个汉字,我们看文本大小是6个字节,所以很明显是utf-8的格式。
下面,我们说说流转换读取:
- public static void utfGet()throws IOException{
- FileInputStream fis = new FileInputStream("f:\\a\\aa.txt");
- char[] c = new char[1024];
- int len = 0;
- InputStreamReader isr = new InputStreamReader(fis,"utf-8");
- len = isr.read(c);
- System.out.println(new String(c,0,len));
- }
实际跟字节字符的读取很像,只是多了个转换流,并指定编码格式。如果这里我们不知道utf-8格式,我们在main函数先运行utfSet()函数,在运行utfGet()函数,我们会发现乱码,如下:
浣犲ソ锛
差不多就是这些,如果有继续补充
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。