Java基础之字符串编码

字符流

  创建  1.txt中写入   '"哈"  字时     系统gbk编码占两个字节  

 1.reader会默认使用系统的字符集去读取比如gbk, 但返回时会从Unicode中去寻找这个字的 编码返回了21704,

     因为java只认 Unicode, 当使用  char( 21704 )  才能由 Unicode转换为   "哈"

 2.汉字的高字节以1开头,所以会第一个字节直接合并第二个,就是一次读两个字节

 3.在读时,返回-1,因为已经没有了,   如果是两个  字母 " ab"  ,一个字母占一个字节,并且高字节不是以1开头,就会一个一个读,所以              显 示  97,98

  判断是不是以 1开头,  是字符流才有的

public class test1 {
    public static void main(String[] args) throws Exception {
        URL resourceAsStream = test1.class.getResource("1.txt");
        String path = resourceAsStream.getPath();
        String decode = URLDecoder.decode(path, "utf-8");
        Reader in = new FileReader(decode);
        int read = in.read();
        System.out.println(read);        21704
        int read2 = in.read();
        System.out.println(read2);        -1
        in.close();
    }
}

字节流

  1.显示 a b c:

 public static void main(String[] args) throws Exception {
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\java\\Java源码\\我的小开发maven版\\src\\main\\resources/1.txt");
        fileOutputStream.write(97);
        fileOutputStream.write(98);
        fileOutputStream.write(99);
        fileOutputStream.close();
    }

  2.显示:  a 焍 b

 public static void main(String[] args) throws Exception {
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\java\\Java源码\\我的小开发maven版\\src\\main\\resources/1.txt");
        fileOutputStream.write(97);
        fileOutputStream.write(-97);
        fileOutputStream.write(98);
        fileOutputStream.write(98);
        fileOutputStream.close();
    }

  说明只要有一个负的字节就会连上后面一个字节,组成一个汉字(记事本GBK组的), java写入 97 -97 98 98 记事本使用gbk解码时     组成汉字,  必须两个字节才能组成一个汉字(gbk)

    fileOutputStream.write(-200);   fileOutputStream.write(97);  显示   8a 

   因为下面 一个直接最大127   -200被转换为整数, 就像    byte b = (byte)-129; 强转时  b 为127

编解码

  编码,字符 --->码表--->数字             解码,数字 --->码表--->汉字

   1.  -2  -1 为Unicode 的标识,以他开头

        byte[] bytes = s.getBytes("Unicode");
        System.out.println(Arrays.toString(bytes));  [-2, -1, 84, -56]

  2.java 以Unicode为标准,   不足两个字节时,会补足为两个   0,97

        String s = "a";
        byte[] bytes = s.getBytes("Unicode");  [-2, -1, 0, 97]

字符流查码表,字节流不查码表

        System.out.println((int)'哈');        21704
        System.out.println((char)21704);       哈

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章