转换流...

字符编码和字符集

字符编码的概述

计算机中储存的信息都是⽤⼆进制数表示的,⽽我们在屏幕上看到的数字、英⽂、标点符号、汉字等字符是⼆进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码。反之,将存储在计算机中的⼆进制数按照某种规则解析显示出来,称为解码 。⽐如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的⽂本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。

  • 字符编码Character Encoding : 就是⼀套⾃然语⾔的字 符与⼆进制数之间的对应规则。

字符集的概述

字符集 Charset:也叫编码表。是⼀个系统⽀持的所有字符的集合,包括各国家⽂字、标点符号、图形符号、数字等 计算机要准确的存储和识别各种字符集符号,需要进⾏字符编 码, ⼀套字符集必然⾄少有⼀套字符编码。 常⻅字符集有 ASCII 字符集、 GBK 字符集、 Unicode 字符集等。


 编码引出的问题

讲解 :

IDEA 中,使⽤ FileReader 读取项⽬中的⽂本⽂件。由于IDEA的设置,都是默认的 UTF-8 编码,所以没有任何问题。但是,当读取Windows 系统中创建的⽂本⽂件时,由于Windows系统的默认是 GBK 编码,就会出现乱码
public class Test07 {
    public static void main(String[] args) throws IOException {
        
        FileReader isr =new FileReader("C:\\Users\\25120\\IdeaProjects\\java\\5.txt");
         int c;
         while ((c=isr.read())!=-1) {
             System.out.println((char) c );
         }
         isr.close();
    }
}

InputStreamReader
InputStreamReader 类的概述
转换流 java.io.InputStreamReader ,是 Reader 的⼦类,是从字节流到字符流的桥梁。它读取字节,并使⽤指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集
InputStreamReader 类的构造⽅法
  • InputStreamReader(InputStream in) : 创建⼀个使⽤默认字符集的字符流。
  • InputStreamReader(InputStream in, StringcharsetName) : 创建⼀个指定字符集的字符流。
构造举例:
InputStreamReader isr = new
InputStreamReader ( new
FileInputStream ( "in.txt" ));
InputStreamReader isr2 = new
InputStreamReader ( new FileInputStream ( "in.txt" ) , "GBK" );
InputStreamReader 类指定编码读取
public class Test07 {
    public static void main(String[] args) throws IOException {
        //转换流
        //InputStreamReader类
        //创建字符转换输入流对象。关联数据源文件路径平台默认编程,utf8
        InputStreamReader isr =new InputStreamReader(new FileInputStream("C:\\Users\\25120\\IdeaProjects\\java\\5.txt"),"UTF-8");
         int c;
         while ((c=isr.read())!=-1) {
             System.out.println((char) c );
         }
         isr.close();
    }
}

OutputStreamWriter类

OutputStreamWriter 类的概述
转换流 java.io.OutputStreamWriter ,是 Writer 的⼦类,是从字符流到字节流的桥梁。使⽤指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集
OutputStreamWriter 类的构造⽅法
  • OutputStreamWriter(OutputStream in) : 创建⼀个使 ⽤默认字符集的字符流。 idea默认的是utf8
  • OutputStreamWriter(OutputStream in, String charsetName) : 创建⼀个指定字符集的字符流
构造举例:
OutputStreamWriter isr = new
OutputStreamWriter ( new
FileOutputStream ( "out.txt" ));
OutputStreamWriter isr2 = new
OutputStreamWriter ( new FileOutputStream ( "out.txt" ) , "GBK" );
OutputStreamWriter 类指定编码读取
public class Test08 {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\25120\\IdeaProjects\\java\\5.txt"), "UTF-8");
          osw.write("中国");
          osw.close();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值