- 编码与解码的理解
- 字符编码:字符、字符串、字符数组---> 字节、字节数组(从我们能看得懂的--->我们看不懂的)
- 字符解码:字节、字节数组---> 字符、字符串、字符数组(从我们看不懂的--->我们能看得懂的)
- 如果希望程序在读取文本文件时,不出现乱码,需要解码时使用的字符集与当初编码时使用的字符集相同(兼容)。
- 转换流:
- 作用:实现字节与字符之间的转换
- API:
- InputStreamReader:将一个输入型的字节流转换为输入型的字符流
- InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。
- InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。
- OutputStreamWriter:将一个输出型的字符流转换为输出型的字节流
- OutputStreamWriter(OutputStream in) 创建一个使用默认字符集的字符流。
- OutputStreamWriter(OutputStream in,String charsetName): 创建一个指定字符集的字符流。
- InputStreamReader:将一个输入型的字节流转换为输入型的字符流
- 代码:
//把"D:\io\io1\test_utf-8.txt"下的字符编码为UTF-8,复制到"D:\io\io2\test_gbk.txt"下字符编码为GBK File file1=new File("D:\\io\\io1\\test_utf-8.txt"); File file2=new File("D:\\io\\io2\\test_gbk.txt"); FileInputStream fis = new FileInputStream(file1); FileOutputStream fos = new FileOutputStream(file2); InputStreamReader isr =new InputStreamReader(fis, "UTF-8"); OutputStreamWriter osw =new OutputStreamWriter(fos, "GBK"); int len; char[] c = new char[1024]; while ((len = isr.read(c)) != -1) { osw.write(c, 0, len); osw.flush(); } System.out.println("操作完成"); isr.close(); osw.close();
- 字符集的理解
- 存储在文件中的字符:
- ascii:主要用来存储a、b、c等英文字符和1、2、3、常用的标点符号。每个字符占用1个字节。
- gbk:用来存储中文简体繁体、a、b、c等英文字符和1、2、3以及常用的标点符号等字符。中文字符使用2个字节存储。
- 且向下兼容ascii,英文字符、1、2、3、标点符号仍使用1个字节。
- utf-8:可以用来存储世界范围内主要的语言的所有的字符。使用1-4个不等的字节表示一个字符。中文字符使用3个字节存储的。
- 且向下兼容ascii,英文字符、1、2、3、标点符号仍使用1个字节。
- 内存中的字符:一个字符(char)占用2个字节。在内存中使用的字符集称为Unicode字符集。
- 存储在文件中的字符:
- 补充:转换流
-
处理流之 2:转换流的使用及各种字符集的介绍
最新推荐文章于 2024-07-15 22:27:18 发布