日期:2014-05-20  浏览次数:21085 次

writeUTF()使用中乱码的解决方法???
try
  { file=new File("G://java code/jackxu/src","good.txt");
  RandomAccessFile out=new RandomAccessFile(file,"rw");
  if(f.exists())
  { long length=f.length();
  out.seek(length);
  }
  out.writeUTF("姓名:"+name.getText());
  out.writeUTF("email:"+email.getText());
  out.writeUTF("电话:"+phone.getText());
  out.close();
  }

 catch(Exception ee){}

上面的是java中使用登陆界面(省略)和 RandomAccessFile的部分代码,当我把从文本框中获取的数据
写入到good.txt,写入的内容能完全显示在good.txt,但是还是存在乱码,writeUTF()是以字符
串的形式写入目的地,这应该没问题啊,这个是怎么回事?当我把写入数据的目的地为good.doc,
word文档什么都没有,这又是怎么回事??

------解决方案--------------------
RandomAccessFile这东西不好用啊~~~~

你一定没仔细看writeUTF方法~~~~~~它的存储格式不是通用格式~~~~~~~

先是用2个byte存储实际写出的字节数,再modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件,注意:我学这个类的时候为了读出之前写入的字符串。。。。。。当时也失败了~~~~~

后来我注意到这个类有个方法getFilePointer() 

于是我每调用一次不同的write方法,输出一次偏移量。。。结果发现。。。。。它这个所谓的utf-8编码实际上是3个byte——至少汉字是!

所以,一个字符串在RandomAccessFile中的实际存储长度为(2+3*字数)个byte

你的偏移量搞对了吗?