1. 程式人生 > >第4章 編碼表

第4章 編碼表

Java

1.1 編碼表的概述
編碼表:把計算機底層的二進制數據轉換成我們能看到的字符

  • ASCII
  • GB2312 --- GBK
  • Unicode 所有的字符都占2個字節
  • UTF-8 長度可變的碼表
  • ANSI:本地編碼表 gbk
  • Java中的字符串默認使用的ANSI(gbk)
  • 亂碼:編碼保持前後一致即可解決
    1.2 Java中字符串的編碼
    1.2.1 常用方法
    構造方法(字節數組轉字符串):
    String():初始化一個新創建的 String 對象,使其表示一個空字符序列
    String(byte[] bytes) 使用平臺的默認字符集解碼指定的 byte 數組,構造一個新的 String
    String(byte[] bytes, Charset charset) 通過使用指定的 charset 解碼指定的 byte 數組,構造一個新的 String
    成員方法(字符串轉字節數組)
    getBytes() 使用平臺的默認字符集將此 String 編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中
    getBytes(Charset charset) 使用給定的 charset 將此 String 編碼到 byte 序列,並將結果存儲到新的 byte 數組

1.2.2 案例代碼十一

package com.itheima_09;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/*
 * 編碼表:把計算機底層的二進制數據轉換成我們能看到的字符
 * ASCII
 *
 * GB2312        ---        GBK
 * Unicode        所有的字符都占2個字節
 * UTF-8        長度可變的碼表
 *
 * ANSI:本地編碼表        gbk
 * Java中的字符串默認使用的ANSI(gbk)
 *
 * 亂碼:編碼保持前後一致即可解決
 *
 */
public class EncoderDemo {
public static void main(String[] args) throws IOException   {
//method();
FileInputStream fis = new FileInputStream("a.txt");
byte[] bys = new byte[1024];
int len = fis.read(bys);
//System.out.println(new String(bys,0,len));
System.out.println(new String(bys,0,len,"UTF-8"));
}

private static void method() throws UnsupportedEncodingException, FileNotFoundException, IOException {
String s = "高薪就業";
//byte[] bys = s.getBytes();//通過默認編碼轉換成數組
byte[] bys = s.getBytes("UTF-8");
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(bys);
fos.close();
}

}

1.3 字符流中的編碼
1.3.1 常見對象
InputStreamReader(InputStream in, CharsetDecoder dec) 創建使用給定字符集×××的 InputStreamReader

OutputStreamWriter(OutputStream out, CharsetEncoder enc) 創建使用給定字符集編碼器的 OutputStreamWriter
1.3.2 案例代碼十二

package com.itheima_09;

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

/*
 * 字符流中的編碼
 *
 * 字符流 = 字節流 + 編碼
 *
 */
public class EncoderDemo2 {
public static void main(String[] args) throws IOException {
//method();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"));
String s = "迎娶白富美";
osw.write(s);
osw.close();
}

private static void method() throws IOException, UnsupportedEncodingException {
FileWriter fw = new FileWriter("b.txt");
String s = "月薪過萬";
byte[] bys = s.getBytes("UTF-8");
//fw.write(s);
fw.write(new String(bys));
fw.close();
}

}

第4章 編碼表