寫這短文以前想問你們一個問題,String 類型是什麼編碼?那char呢?java
其實,記住一句話就好了,String 和char 都是unicode編碼!!!底層的虛擬機和框架只能直接操做unicode編碼。String= char[]常量+方法。因此,char的編碼就是String的編碼。開始學java的時候,第一節課,就告訴咱們 java的字符編碼是unicode編碼。因此咱們初始化char變量的時候,只能將unicode編碼賦值給char.數組
例如 char c=’編';char c=(char)0x7f16 。還好,大部分編碼前128個字符都是同樣的,也就是ASCII的前128個字符。char c=(char)65;網絡
下面說說字符編碼轉換框架
字符編碼轉換的基本原理是這樣的,先將原始編碼轉unicode編碼,再轉成目標編碼。編碼
好比一個utf-8編碼的字節數組 byte[] bytes,先是String s=new String(bytes,「utf-8」);//用utf-8編碼的字節數組初始化一個unicode編碼的字符串。byte[] newBytes=s.getBytes("gb2312");//獲得gb2312編碼的字節數組。若是自己就是一個字符串了,就直接getBytes成目標編碼就好了。若是是從網絡上獲得數據byte[],必定要在new String設置編碼類型。若是獲得的目標編碼不對,那必定是字符串初始化不對。
code
若是有人說,怎麼將utf-8的字符串(String)轉成gb2312的字符串,你直接上去給他幾巴掌,String自己就是unicode編碼,哪裏來utf-8的字符串。好了,utf-8 gb2312都是對於字節數組來講的。utf-8
C#的也是同樣的原理。unicode