Java 字符集,編碼、解碼

 

一、編碼

計算機中文件、數據底層都是基於二進制的。spa

計算機底層並無文本文件、圖片文件之分,它只是記錄着每一個文件的二進制序列。code

 

字符集:包含着字符和二進制序列之間的對應關係,一個字符對應一個二進制序列。對象

 

編碼(Encode):把人能看懂的明文轉換爲計算機能理解二進制序列。blog

解碼(Decode):把計算機中的二進制序列轉換爲人能看懂的明文。圖片

 

亂碼:解碼方式與編碼方式不一樣,即編碼、解碼使用的字符集不一致。get

 

Windows中文本文件的默認字符集是GBK。it

 

 

 

 

 

二、class

字節的文件輸出流能夠指定寫入模式:亂碼

FileOutputStream fos=new FileOutputStream(String/File file);
FileOutputStream fos=new FileOutputStream(String/File file,boolean b);     //第二個參數指定是不是追加模式,true——追加,false——覆蓋。


字符的文件流能夠指定字符集:

FileWriter fw=new FileWriter(String/File file);
FileReader fr=new FileReader(String/File file);
 //指定字符集
FileWriter fw=new FileWriter(String/File file, String/Charset charset);
FileReader fr=new FileReader(String/File file, String/Charset charset);

//字符的文件輸出流還能夠指定寫入模式
FileWriter fw=new FileWriter(String/File file, boolean b ); //是不是追加模式
FileWriter fw=new FileWriter(String/File file, String/Charset charset, boolean b);

 

2個轉換流能夠指定編碼/解碼的字符集:

InputStreamReader isr=new InputStreamReader(InputStream is, String/Charset  charset);   //指定解碼字符集
OutputStreamWriter osr=new OutputStreamWriter(OutputStream os, String/Charset charset); //指定編碼字符集




 

 

三、NIO中的Charset類

 1   //建立Charset對象,指定編碼/解碼用的字符集
 2         Charset charset=Charset.forName("GBK");
 3 
 4         //建立編碼器
 5         CharsetEncoder encoder=charset.newEncoder();
 6         //使用編碼器進行編碼。編碼是把字符序列轉換爲字節序列,參數只能是CharBuffer類型,返回值是ByteBuffer類型
 7         ByteBuffer byteBuffer=encoder.encode(CharBuffer charBuffer);
 8         
 9         //建立解碼器
10         CharsetDecoder decoder=charset.newDecoder();
11         //使用解碼器進行解碼。解碼是把字節序列轉換爲字符序列,參數爲ByteBuffer類型,返回值是CharBuffer類型
12         CharBuffer charBuffer=decoder.decode(ByteBuffer byteBuffer);

 

也能夠不建立編碼器、解碼器:

1    //建立Charset對象,指定編碼/解碼用的字符集
2         Charset charset=Charset.forName("GBK");
3 
4         //編碼
5         ByteBuffer byteBuffer=charset.encode(String str);  //此處可以使用String作參數
6         ByteBuffer byteBuffer=charset.encode(CharBuffer charBuffer);
7         
8         //解碼
9         CharBuffer charBuffer=charset.decode(ByteBuffer byteBuffer);

更加簡單。

 

 

String類的對象還能夠使用如下方法將String(字符序列)編碼爲byte[](字節序列):

  • byte[]  getBytes()     //使用平臺默認的字符集
  • byte[]  getBytes(String/Charset  charset)     //使用指定的字符集

返回編碼好的字節序列。

相關文章
相關標籤/搜索