黑马程序员技术交流社区

标题: 关于IO输出问题 [打印本页]

作者: 彩虹    时间: 2012-5-9 09:08
标题: 关于IO输出问题
一.import java.io.*;
   import java.util.*;
   class  propertiesDemo
   {
        public static void main(String[] args) throws IOException
        {
                //method_1();
                loadDemo();
        }
        public static void loadDemo() throws IOException
        {
                Properties prop=new Properties();
                FileInputStream fis=new FileInputStream("info.txt");
                //将流中的数据加载进集合
                prop.load(fis);
                //System.out.println(prop);
                prop.list(System.out);
        }
   }
   代码中,如果将info.txt文本文件里的人名用汉字表示,在控制台上打印时为什么识别不出来,显示的是一   串???号


作者: H_H_K    时间: 2012-5-9 09:28
亲,中文是2个字节的, FileInputStream是字节流,拿一个中文的字符都想转换是转换不成的。
改成字符流就行了。
作者: H_H_K    时间: 2012-5-9 09:31
亲,中文是2个字节的, FileInputStream是字节流,拿中文的其中一个字节都想转换是转换不成的。
改成字符流FileReader就行了。
作者: 周素强    时间: 2012-5-9 09:46
本帖最后由 周素强 于 2012-5-9 09:52 编辑

load(InputStream) 方法默认用的是ISO 8859-1 字符编码,所以你的中文字会出现????的情况,
解决1,可以使用load(Reader)方法替换它。
解决2,load后在输出前利用编码(指定ISO 8859-1 字符集)再解码(指定gbk字符集)
编码:字符串变成字节数组
String -->byte[]str.getBytes(字符集名);
解码:字节数组变成字符串
Byte[] -->Stringnew Strnig(byte[],字符集名);

作者: —__    时间: 2012-5-9 10:12
1楼回答不正确
事实上关键在于你是用控制台打印的,而计算机语言对于字符的编码有很多用,就例如你用txt 等类型的文件查看一个字符时 事实上这个字符只是两个字节,而这两个字节经过了不同的编码进行翻译在成为你眼中看到的,所能识别的字体,而你用控制台打印并没有导入 编译方法,所以打印不出来 你可以参照我楼上兄弟的方法解决,他已经说出来了 我就只说一个思路




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2