這里涉及兩個概念:編碼、解碼。
編碼(encode):把明文的字符序列轉化成二進制的字節序列。
解碼(decode):把二進制的字節序列轉換成明文的字符序列。
java默認的使用Unicode字符集,但是有的操作系統不支持,所以當從操作系統讀取到java程序的時候,就可能出現亂碼的情況。
jdk1.4提供了Charset類來處理字節序列和字符序列之間的轉換。Charset類是不可變類。
Charset類提供了一個availiableCharset()靜態方法來獲取當前jdk支持的所有字符集。
常用的字符集:
GBK:簡體中文。BIG5:繁體中文。ISO-8859-1:ISO拉丁字母表No.1,也叫ISO-LATIN-1.UTF-8:8位UCS轉換格式。
知道了字符集的別名之后,就可以使用Charset的forName()方法,創建字符集對象。如下
Charset cs = Charset.forName("UTF-8");
獲得Charset對象之后就可以調用該對象的newDecode()/newEncode()這兩個方法返回CharsetDecoder/CharsetEncoder對象,這兩個對象代表Chars的解碼器和編碼器。調用CharsetDecoder的decode方法就可以將字符序列字節序列轉換成字符序列(ByteBuffer)->(CharBuffer),同理調用encode就可以將字符序列轉換成字節序列
(CharBuffer)->(ByteBuffer).
(String)->(ByteBuffer)
在String類里面提供了一個getBytes(String charset)方法。該方法返回byte[],該方法同樣可以將制定字符集轉換成字節序列。