黑马程序员技术交流社区

标题: 求救乱码问题 [打印本页]

作者: 泥土知识    时间: 2014-9-6 22:01
标题: 求救乱码问题
本帖最后由 泥土知识 于 2014-9-7 14:14 编辑

public class Test2 {
        public static void main(String[] args) throws IOException {
                String path="D:/chuan.txt";
                FileInputStream fis=new FileInputStream(path); //最好加一个转换流 改成这样写BufferedReader br=                                                                                                //   new BufferedReader(new InputStreamReader(new FileInputStream(path)  ,"GBK"))
                //FileOutputStream fos=new FileOutputStream(path);
                Properties prop=new Properties();
                prop.load(fis);                       //相应的这里fis改成br即可
                prop.list(System.out);
                prop.setProperty("王学林","25");
                prop.list(System.out);
                //prop.store(fos,"hahah");
                //fos.close();
                fis.close();
        }
}
这里只要一在控制台打印就乱码,很想知道为什么,我在Eclipse中改了几次编码都不行
其中chuan.txt 中的内容为
#hahah
#Sat Sep 06 15:37:50 GMT+08:00 2014
中海=23
黄传飞=24
王学林=98
王磊=24


QQ图片20140906215852.jpg (28.91 KB, 下载次数: 23)

其中d:/chuan.txt

其中d:/chuan.txt

作者: 迷失的独白    时间: 2014-9-6 22:27

  1. public class Test2 {
  2.         public static void main(String[] args) throws IOException {
  3.                 String path="D:/chuan.txt";               
  4.                 //FileInputStream fis=new FileInputStream(path);
  5.                 //下边这句话,可以使用默认或指定编码的字符集
  6.                 InputStreamReader fis=new InputStreamReader(new FileInputStream(path));
  7.                 //FileOutputStream fos=new FileOutputStream(path);
  8.                 Properties prop=new Properties();
  9.                 prop.load(fis);
  10.                 prop.list(System.out);
  11.                 prop.setProperty("王学林","25");
  12.                 prop.list(System.out);
  13.                 //prop.store(fos,"hahah");
  14.                 //fos.close();
  15.                 fis.close();
  16.         }
  17. }
复制代码


作者: 泥土知识    时间: 2014-9-6 22:38
迷失的独白 发表于 2014-9-6 22:27

你是说用转换流,但是我这里没使用字符编码,应该不用也行啊,其实我用了指定的编码方式发现也行,但是这里我主要是想问为什么不指定编码方式不行
作者: 潘多拉    时间: 2014-9-6 22:41
是不是编码表的问题啊,改改试试呗
作者: 泥土知识    时间: 2014-9-6 22:42
潘多拉 发表于 2014-9-6 22:41
是不是编码表的问题啊,改改试试呗

我已经在Eclipse中把能用的编码都试了一遍了!!!还是不行
作者: wenjd0000    时间: 2014-9-6 22:59
txt打开方式吗 看不懂
作者: 迷失的独白    时间: 2014-9-6 23:08
泥土知识 发表于 2014-9-6 22:38
你是说用转换流,但是我这里没使用字符编码,应该不用也行啊,其实我用了指定的编码方式发现也行,但是这 ...

看API文档对Properties的解释
load(Reader) / store(Writer, String) 方法按下面所指定的、简单的面向行的格式在基于字符的流中加载和存储属性。除了输入/输出流使用 ISO 8859-1 字符编码外,load(InputStream) / store(OutputStream, String) 方法与 load(Reader)/store(Writer, String) 对的工作方式完全相同。可以使用 Unicode 转义来编写此编码中无法直接表示的字符;转义序列中只允许单个 'u' 字符。可使用 native2ascii 工具对属性文件和其他字符编码进行相互转换。
应该是解码的原因

prop.setProperty("王学林","25");
这句应该是你怎么编进去的,就怎么编出来的。
作者: 迷失的独白    时间: 2014-9-6 23:21
泥土知识 发表于 2014-9-6 22:42
我已经在Eclipse中把能用的编码都试了一遍了!!!还是不行

你读取文件的方式有问题
FileReader fis=new FileReader(path);
作者: 泥土知识    时间: 2014-9-6 23:37
迷失的独白 发表于 2014-9-6 23:21
你读取文件的方式有问题
FileReader fis=new FileReader(path);

问题在哪里:o
作者: 迷失的独白    时间: 2014-9-7 00:03
泥土知识 发表于 2014-9-6 23:37
问题在哪里

具体的我忘了,我是正在复习阶段
但是我记得毕老师的视频里讲,处理字符的时候尽量不要用字节流
你的这个程序大意可以理解为
你用字节流接收一个文件,但是输出的时候使用了默认的编码表ISO 8859-1
如果不想使用默认的编码表,就必须一开始就指定编码表
InputStreamReader将字节流转换为字符流,并可以指定编码
FileReader直接读取字符

作者: MeryStyle    时间: 2014-9-7 00:38
7#回答的很好!
作者: 泥土知识    时间: 2014-9-7 08:45
迷失的独白 发表于 2014-9-7 00:03
具体的我忘了,我是正在复习阶段
但是我记得毕老师的视频里讲,处理字符的时候尽量不要用字节流
你的这个 ...

好的,我明白了




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