Java IO 编码

  在D:\document_oj\practice\javaIO 分别新建了联通、联想、联三个txt文件,并文件夹里面的内容为各自的文件名,然而之后再次打开三个文件,只有联想文件的内容是正确显示的,其余两个都是显示乱码。原因是编码导致的,联通文件的编码格式是ANSI,其余两个文件的编码格式是UTF-8。

  如果我们在中文机器上直接创建文本文件,则该文本文件只认识ansi编码,但文件文本本身是接受任意编码的,所以如果是直接粘贴到任意一个位置下的文本文件则不会显示乱码,各种编码都支持,只有在机器上创建文本文件,才只认识ansi。

  在eclipse中,什么样编码格式的项目,就只认识什么编码的文字,不然有可能出现乱码

package com.imooc.io;

public class EncodeDemo {

	public static void main(String[] args) throws Exception {
		String s = "丫丫 Java IO Test !";
		//转换为字节序列用户的是项目默认的编码gbk
		//gbk编码中一个中文占两个字节,一个字母一个字节
		byte[] defaultEncode = s.getBytes();
		for (byte b:defaultEncode) {
			//把字节(转成了int)以16进制的方式显示
			//一个字节8位,一个int32位,等于会在前面加上24个0,为了不显示前面24个0,则 & 0xff
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		System.out.println();
		
		//gbk编码下的输出
		byte[] gbks= s.getBytes("gbk");
		for (byte b:gbks) {
			 System.out.print(Integer.toHexString(b & 0xff) + " ");    
		}
		System.out.println();
		
		//在utf-8中中文占用三个字节,英文占用一个字节
		byte[] utf_8s = s.getBytes("utf-8");
		for (byte b:utf_8s) {
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		System.out.println();
		
		//java是双字节编码utf-16be
		byte[] utf_16be = s.getBytes("utf-16be");
		//utf-16be中文占用两个字节,英文也是占用2个字节
		for (byte b:utf_16be) {
			System.out.print(Integer.toHexString(b & 0xFF) + " ");
		}
		System.out.println();
		
		/**
		 *当你的字节序列是某种编码时,这个时候想把字节序列变成
		 *字符串,也需要用这种编码方式,否则会出现乱码 
		 */
		String str1 = new String(utf_16be);//用项目默认的编码
		System.out.println(str1);
		String str2 = new String(utf_16be, "utf-16be");
		System.out.println(str2);
		
		/**
		 * 文本文件  就是字节序列
		 * 本身可以是任意编码的字节序列
		 * 但是如果我们在中文机器上直接创建文本文件,该文件文本只认识ansi编码
		 */
		
		
	}
}

  

posted @ 2017-03-02 13:55  Timer©jiao  阅读(141)  评论(0)    收藏  举报