字符编码
字符流的出现为了方便操作字符。更重要的加入了编码转换。
通过子类转换流来完成: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=哈哈
本文深入探讨了字符编码的概念及其在字符流操作中的重要性。通过实例展示了如何使用InputStreamReader和OutputStreamWriter进行编码转换,并提供了ASCII、ISO8859-1、GB2312、GBK和Unicode等常见编码表的介绍。此外,还详细说明了编码与解码过程,包括将字符串转换为字节数组和从字节数组还原字符串的方法。
390

被折叠的 条评论
为什么被折叠?



