A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彩虹 中级黑马   /  2012-5-9 09:08  /  1633 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一.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文本文件里的人名用汉字表示,在控制台上打印时为什么识别不出来,显示的是一   串???号

4 个回复

倒序浏览
亲,中文是2个字节的, FileInputStream是字节流,拿一个中文的字符都想转换是转换不成的。
改成字符流就行了。
回复 使用道具 举报
亲,中文是2个字节的, FileInputStream是字节流,拿中文的其中一个字节都想转换是转换不成的。
改成字符流FileReader就行了。
回复 使用道具 举报
本帖最后由 周素强 于 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[],字符集名);
回复 使用道具 举报
1楼回答不正确
事实上关键在于你是用控制台打印的,而计算机语言对于字符的编码有很多用,就例如你用txt 等类型的文件查看一个字符时 事实上这个字符只是两个字节,而这两个字节经过了不同的编码进行翻译在成为你眼中看到的,所能识别的字体,而你用控制台打印并没有导入 编译方法,所以打印不出来 你可以参照我楼上兄弟的方法解决,他已经说出来了 我就只说一个思路
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马