定義:
CharSet是對java nio編碼解碼的解決方案,專門負責字符的編碼和解碼。
編碼:字符數組、字符串 ===> 字節數組。
解碼:字節數組 ==> 字符數組、字符串
API詳解:
獲取CharSet的API:
//創建一個charSet,傳入字符集名稱 比如utf-8
public static Charset forName(String charsetName)
//返回一個默認字符集的charset,UTF-8
public static Charset defaultCharset()
編碼解碼API
//解碼,把字節緩衝區解碼成字符緩衝區。
public final CharBuffer decode(ByteBuffer bb)
//編碼。把字符緩衝區編碼成字節緩衝區。
public final ByteBuffer encode(CharBuffer cb)
//編碼。把字符串編碼成字節緩衝區。
public final ByteBuffer encode(String str)
//返回一個解碼器,用於專門進行解碼。提供更多的功能。
public abstract CharsetDecoder newDecoder();
//返回一個編碼器,用於專門進行編碼。提供更多的功能。
public abstract CharsetEncoder newEncoder();
demo:
public static void testEnCodeDeCode(){
Charset UTF8CharSet = Charset.forName("utf-8");
Charset GBKCharSet = Charset.forName("gbk");
String content = "我賊帥!!";
ByteBuffer byteBuffer = UTF8CharSet.encode(content);
//用同樣的字符集進行解碼,不會亂碼
System.out.println("=================>>>UTF8CharSet encode, UTF8CharSet decode<<<====================");
System.out.println(new String(UTF8CharSet.decode(byteBuffer).array()));
byteBuffer.clear();
//用不一樣的字符集進行解碼,亂碼
System.out.println("=================>>>UTF8CharSet encode, GBKCharSet decode<<<====================");
System.out.println(new String(GBKCharSet.decode(byteBuffer).array()));
}
結果:
注意:
- 編碼與解碼要用一樣的字符集,不然會造成亂碼。
- 如果只是進行簡單的編碼解碼,無需使用專用的編碼器和解碼器,在Charset中完成就好。
其他API:
//返回字符集的名字
public final String name()
//返回字符集的名字,與name()一樣的效果。
public String displayName()
//返回是否支持傳入參數charsetName代表的字符集
public static boolean isSupported(String charsetName)
//返回此字符集是否註冊在 http://www.iana.org/assignments/character-sets IANA字符集註冊表中。
public final boolean isRegistered();
//返回此字符集的別名的set集合。
public final Set<String> aliases()
//返回可用的字符集的集合。返回一個SortedMap結構,鍵是字符集名稱,值是代表字符集的CharSet對象。
public static SortedMap<String,Charset> availableCharsets()
//判斷兩個字符集是否相等,0相等,返回非零不相等,其實就是比較字符集的名字。忽略大小寫。
public final int compareTo(Charset that)
//返回此字符集是否支持編碼。
public boolean canEncode()