java I/O 输入输出流的编码问题

在中文机器下分别创建三个文本文件,分别为:

 

打开文本文件之后分别如下:

 java I/O 输入输出流的编码问题_第1张图片       

前两者出现了乱码问题:

使用另存为文件时会发现,前两种文本使用的编码方式为UTF-8,后一种为ANSI编码(中文机器下代表gbk编码)

联、联通 保存时采用的编码方式为UTF-8,而中文机器下在文本编辑器中输入的文本只有ANSI编码格式才能正常显示

注:文本编辑器是可以识别任何编码方式的,如果在其他地方新建一个utf-8编码的文本文件,粘贴到机器上的某个位置,如桌面。。打开后不会出现乱码。在新建文本文件时直接编辑文本,若文本内容不是ANSI编码,就会出现乱码。


对于JAVA语言中编码方式的使用方式如下:

public static void main(String[] arg) throws Exception {
		String s = "慕课网ABC";
		// 转换成字节序列用的是项目默认的编码方式(该项目默认为 utf-8)
		byte[] bytes1 = s.getBytes();
		//utf-8编码中文占3个字节,编码英文占1个字节
		for (byte b : bytes1) {
			// 把字节转换成了int,以16进制的方式显示
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		System.out.print("\n");
		
		//把字符串按指定格式的编码(gbk)转换成字节
		byte[] bytes2 = s.getBytes("gbk");
		//gbk编码中文占两个字节,英文占1个字节
		for(byte b : bytes2) {
			//把字节转换成了int,以16进制方式显示
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		System.out.print("\n");
		
		//java是双字节编码 utf-16be
		byte[] bytes3 = s.getBytes("utf-16be");
		//utf-be 中文占用2个字节,英文占用2个字节
		for(byte b : bytes3) {
			System.out.print((b & 0xff) + " ");
		}
		System.out.print("\n");
		
		/*
		 * 当你的字节序列是某种编码时,这个时候想把字节序列转换
		 * 成字符串时,也需要用这种编码方式,否则会出现乱码
		 */
		//不指定编码方式时,用项目默认的编码(当前为utf-8)
		//因为bytes3编码方式为utf-16be,故会出现乱码
		String str1 = new String(bytes3);
		System.out.println(str1);
	    //改为如下形式就不会有乱码
		String str2 = new String(bytes3, "utf-16be");
		System.out.println(str2);
		
		//相应的bytes1的编码方式 是默认的编码方式(utf-8)
		String str3 = new String(bytes1);
		String str4 = new String(bytes1, "utf-8");
		System.out.println(str3 + " " + str4);
		
		//bytes2的编码方式为gbk
		String str5 = new String(bytes2, "gbk");
		System.out.print(str5);
		
		/*
		 * 文本文件 就是字节序列
		 * 可以是任意编码的字节序列
		 * 如果我们在中文机器上直接创建文本文件
		 * 那么该文本文件只认识ansi编码
		 * 中文系统下ansi编码代表gbk编码
		 * 文本文件可以识别任意类型的文本文件,若把文件拷贝到机器上则不会出现乱码
		 * 联通、联这是一种巧合,他们正好符合了utf-8编码的规则。
		 * eclipse编辑器中的每个项目都有自己的编码方式
		 * 该项目设置为什么编码方式,则该项目中的文本文件必须为该编码方式
		 * 否则会出现乱码
		 * 若另外的编码方式文本内容拷贝到该项目的文本文件中,则不会出现乱码
		 * 因为,编辑器会自动转换成对应的编码方式显示
		 * 
		 */
	}


eclipse中查看一个项目的文本编码方式:

右键该项目-----〉选择 Properties(属性) -----〉进入到如下界面:

java I/O 输入输出流的编码问题_第2张图片 

可以看到被框住的部分:Text file encoding 第一行为项目默认的编码方式,可以通过第二项修改编码方式,然后,

一次Apply ---> Ok

即可修改或查看编码方式了。

你可能感兴趣的:(java)