转换流的字符编码
一、概述
编码表的由来:
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[]);
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修改版