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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章闽 中级黑马   /  2012-10-22 18:05  /  1856 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) throws IOException {
        FileOutputStream fo = new FileOutputStream("D:\\k.txt");
        fo.write((int)'好');
        fo.close();
        }
用java io的字节流向文件存入一个“好”字,文件中出现了乱码,为什么?
如果存入一个“a”就可以!

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

8 个回复

倒序浏览
fo.write((int)'好');
这步的问题,应该是类型转换出的问题。
回复 使用道具 举报
编码的问题,你的记事本是UTF-8编码存的,存取中文的时候会出现乱码
回复 使用道具 举报
存储“好“时,用的编码是GBK,但用记事本打开时,记事本用的是‘UTF-8,
所以才出现乱码
回复 使用道具 举报
据我所知 (int)'好' 获得是ANSII码,ANSII码应该不支持汉字,猜的,坐等大神
回复 使用道具 举报
  1.         public static void main(String[] args) throws IOException {
  2.                 FileOutputStream fo = new FileOutputStream("D:\\k.txt");//建立输出文件
  3.                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo));//转换输出流
  4.                 bw.write("你");//将字符串写入缓冲流               
  5.                 bw.flush();//执行缓冲流中的写入
  6.                 bw.close();//关闭缓冲
  7.                 fo.close();//关闭文件写入
  8.         }
复制代码
回复 使用道具 举报
吴兵 中级黑马 2012-10-22 20:00:16
7#
FileOutpuStream的write() 方法是将指定的字节写入此文件输出流。
写入前应该将字符使用.getBytes()转换为字节
  1.         public static void main(String[] args) throws IOException
  2.         {
  3.         FileOutputStream fo = new FileOutputStream("D:\\k.txt");
  4.         fo.write("好".getBytes());
  5.         fo.close();
  6.     }
复制代码
回复 使用道具 举报
你用的是字节流,而汉字是字符流,你想以字节流的形式写入两个字符(两个字符代表一个汉字)肯定是不行的,应该把字符转成字节,楼上代码正确。
回复 使用道具 举报
张亮 中级黑马 2012-10-23 22:44:51
9#
本帖最后由 张亮 于 2012-10-23 22:47 编辑

public static void main(String[] args) throws IOException {
        FileOutputStream fo = new FileOutputStream("D:\\k.txt");
        fo.write((int)'好');//是这的问题,‘好’是字符类型,强转成int类型的值是22909,所以写入的就是22909对应的“}”
        fo.close();
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马