为了账号安全,请及时绑定邮箱和手机立即绑定

关于编码的问题

该代码中,已经把“中”以gbk的方式进行存储,而后又以gbk编码的形式将其读取,为什么还会出现乱码?

正在回答

10 回答

txt文本的编码是ansi,虽然你写入时设置了gbk(txt文件中可以正常显示)但是控制台输出的编码是utf-8和ansi不相符合,所以出现乱码。个人意见,还请指正.

0 回复 有任何疑惑可以回复我~


pppp

0 回复 有任何疑惑可以回复我~

oo o lo o
oo oo
oo
l

0 回复 有任何疑惑可以回复我~

oolo

0 回复 有任何疑惑可以回复我~

o

lo

0 回复 有任何疑惑可以回复我~

ooo o

0 回复 有任何疑惑可以回复我~

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
public class RafDome {

 public static void main(String[] args) throws IOException {
  File demo  = new File("demo");
  if(!demo.exists()){
   demo.mkdir();
  }
  File file =new File(demo,"ra.dat");
  if(!file.exists()){
   file.createNewFile();
  }  
  RandomAccessFile raf =new RandomAccessFile(file,"rw");
  System.out.println(raf.getFilePointer());


  String s="AB123456中国人民政府";
  byte[]  buf =s.getBytes("gbk");
  System.out.println(buf.length);
  raf.write(buf.length);
  raf.write(buf);
  
  raf.seek(0);
  
  byte [] bu  =new byte[(int)raf.read()];  
  raf.read(bu);
  String  str= new  String(bu,"gbk");
  System.out.println(str);
  raf.close();
 }
}

//这里我写了一个批量写入和读取


0 回复 有任何疑惑可以回复我~
public class RandomAccessFileTest {
	public static void main(String[] args)throws IOException {
		File file1=new File("demo");
		if(!file1.exists())
			file1.mkdir();
		File file2=new File(file1,"a.txt");
		if(!file2.exists())
			file2.createNewFile();
		RandomAccessFile raf = new RandomAccessFile(file2, "rw");
		//指针的位置
		System.out.println(raf.getFilePointer());
		raf.write('a');//只写一个字节
		System.out.println(raf.getFilePointer());
		raf.write('b');
		System.out.println(raf.getFilePointer());
		int i=0x7fffffff;
		raf.write(i>>>24);//写入后八位
		System.out.println(raf.getFilePointer());

		raf.write(i>>>16);
		System.out.println(raf.getFilePointer());
		
		raf.write(i>>>8);
		System.out.println(raf.getFilePointer());

		raf.write(i);
		System.out.println(raf.getFilePointer());

		raf.writeInt(i);
		System.out.println(raf.getFilePointer());
		
		String string="中";
		byte[] byte1=string.getBytes("gbk");
		raf.write(byte1);//汉字在gbk编码中占两个字节
		System.out.println(raf.getFilePointer());
		System.out.println("显示该文件的字节总长度:"+raf.length());

		
		//进行读取操作,一次性将所有内容读取出来
		raf.seek(0);//将指针的指向移动到开头
		byte[] byte3=new byte[(int)raf.length()];
		raf.read(byte3);//将文件的内容读到字节数组中
		System.out.println(Arrays.toString(byte3));
		String string3=new String(byte3,"gbk");
		System.out.println(string3);
		}
	}


0 回复 有任何疑惑可以回复我~

把代码粘上来

0 回复 有任何疑惑可以回复我~
#1

慕前端1178442 提问者

我的代码发在下边了
2016-11-16 回复 有任何疑惑可以回复我~
#2

呆萌的小宝

你这个是完全不能正常读取 还是可以读取到内容 后面跟一段乱码
2016-11-16 回复 有任何疑惑可以回复我~
#3

慕前端1178442 提问者 回复 呆萌的小宝

不能正常读取,出来的直接就是乱码
2016-11-16 回复 有任何疑惑可以回复我~
#4

慕前端1178442 提问者 回复 呆萌的小宝

我刚刚照着你的方法试了试,还是乱码...
2016-11-16 回复 有任何疑惑可以回复我~
查看1条回复

发源码来看看,照你直接说的意思应该是没有问题的

0 回复 有任何疑惑可以回复我~
#1

慕前端1178442 提问者

我的代码发在下边了
2016-11-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
文件传输基础——Java IO流
  • 参与学习       133762    人
  • 解答问题       1030    个

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

进入课程

关于编码的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信