java基础<IO输出与输入>--->字符编码

转换流的字符编码

一、概述

编码表的由来:
1.计算机智能识别(1,0)这样的二进制数据
2.为了方便应用计算机,让他识别各个国家的文字,就将各个国家的文字用数字来表示,形成一对一的对应关系,从而形成了一张表
3.这就是编码表

二、常见的编码表:
1.ASCII:美国标准信息交换码
用一个字节中的7位就可以表示
2.ISO8859-1:拉丁码表(欧洲码表)
用一个字节的8位表示。
3.GB2312:中文码表
兼容ASCII码表,中文的两个8位高位都是1
4.GBK:升级版的中文码表
融合了更多的中文文字字符
5.Unicode:国际标准码表
所有文字都由两个8位来表示(比较浪费空间),融合了多种文字,Java语言使用的是unicode(char)
6.UTF-8:unicode转换格式(全世界通用)
最多三个字节来表示一个字符

三、代码

import java.io.*;

class EncodeStream 
{
	public static void main(String[] args) 
	{
		
	}

	public static void readText() throws IOException
	{
		InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt","GBK");
		char[] buf=new char[10];
		int len=isr.read[buf];
		String str=new String(buf,0,len);
		System.out.println(str);
	}

	public static void writeText()throws IOException
	{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"UTF-8");

		osw.write("你好");
		osw.close();
	
	}
}

字符编码

一、概述
编码:字符串 变 字节数组
String-->byte[];   str.getBytes();

解码:字节数组 变 字符串
byte[]-->String;   new String(byte[]);

二、代码

import java.util.*;

class EncodeStream1  
{
	public static void main(String[] args) throws Exception
	{
		String s="你好";

		byte[] b1=s.getBytes("GBK");//默认为GBK进行编码

		//byte[] b1=s.getBytes("ISO8859-1");//会出乱码

/*①*/	System.out.println(Arrays.toString(b1));//会输出4个负数(-60,-29,-70,-61)

		String s1=new String(b1,"GBK");//默认为GBK进行解码
		
/*②*/	System.out.println(s1);//会输出你好

		String s2=new String(b1,"ISO8859-1");//解码错误的s2

/*③*/	System.out.println(s2);//会输出????
		
		byte[] b2=s2.getBytes("ISO8859-1");//将s2按照ISO8859-1进行编码

		String s3=new String(b2,"GBK");//再将编码后的字节数组按照GBK进行解码

/*④*/	System.out.println(s3);//会输出"你好"

		String s4=new String(b1,"UTF-8");//将b1用UTF-8进行解码

/*⑤*/	System.out.println(s4);//会输出???

		byte[] b3=s4.getBytes("UTF-8");//将s4使用UTF-8进行编码

		String s5=new String(b3,"GBK");//将b3按照GBK进行解码

/*⑥*/	System.out.println(s5);//不会输出"你好",而会输出乱码,这是因为UTF-8也识别中文的原因。

	}
}

UTF-8修改版

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章