java-IO流-字符编码

本文深入探讨了字符编码的概念及其在字符流操作中的重要性。通过实例展示了如何使用InputStreamReader和OutputStreamWriter进行编码转换,并提供了ASCII、ISO8859-1、GB2312、GBK和Unicode等常见编码表的介绍。此外,还详细说明了编码与解码过程,包括将字符串转换为字节数组和从字节数组还原字符串的方法。

字符编码

字符流的出现为了方便操作字符。更重要的加入了编码转换。
通过子类转换流来完成:InputStreamReader 和 OutputSreamWriter
在两个对象进行构造的时候可以加入字符集。

常见的编码表:
ASCII:美国标准交换吗,用一个字节的7位可以表示。
ISO8859-1:拉丁码表,用一个字节的8位表示。
GB2312:中国的中文码表。
GBK:中国的中文码表升级,融合了更多的中文字符号。
Unicode:国际标准码,融合了多种文字。所偶蚊子都用两个字节来表示,java语言使用的就是unicode。
UTF-8:最多用三个字节来表示一个字符。

GBK与UTF-8的示例:

import java.io.*;
class  Test
{
	public static void main(String[] args) throws Exception
	{
		writeText();readText();
	}
	public static void readText()throws IOException 
	{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("gbk1.txt"),"gbk");
		char[] ch=new char[10];
		int len=isr.read(ch);
		String str = new String(ch,0,len);
		System.out.println(str);
		isr.close();
	}
	public static void writeText()throws IOException 
	{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"));
		OutputStreamWriter osw1=new OutputStreamWriter(new FileOutputStream("gbk1.txt"),"utf-8");
		osw.write("你好");
		osw1.write("你好");
		osw.close();
		osw1.close();
	}
}

编码:字符串变成字节数组。
String-->byte[];  str.getBytes(charsetName);
解码:字节数组变成字符串。
byte[] -->String: new String(byte[],charsetName);

import java.util.*;
class  Test
{
	public static void main(String[] args) throws Exception
	{
		String s = "哈哈";
		byte[] b1 = s.getBytes("GBK");
		System.out.println(Arrays.toString(b1));
		String s1 = new String(b1,"utf-8");
		System.out.println("s1="+s1);

		byte[] b2 = s.getBytes("utf-8");
		System.out.println(Arrays.toString(b2));
		String s2 = new String(b2,"utf-8");
		System.out.println("s2="+s2);
	}
}
结果:

[-71, -2, -71, -2]
s1=????
[-27, -109, -120, -27, -109, -120]
s2=哈哈


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值