java编码问题详解
生活随笔
收集整理的這篇文章主要介紹了
java编码问题详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
import java.io.UnsupportedEncodingException;
import java.util.Arrays;/*編碼: 字符變成字節(jié)數(shù)組解碼: 字節(jié)數(shù)組變成字符串String --> byte[] : str.getBytes()byte[] --> String : new String(byte[])*/public class EncodeDemo {public static void main(String[] args) throws UnsupportedEncodingException {/*示例一:用相同的字符集編碼和解碼(UTF-8)*/String str = "你好";byte[] bytes = str.getBytes("UTF-8"); // 用UTF-8字符集將“你好”轉(zhuǎn)換成字節(jié)數(shù)組System.out.println(Arrays.toString(bytes)); // 打印編碼后的字節(jié)數(shù)組: [-28, -67, -96, -27, -91, -67]str = new String(bytes, "UTF-8"); // 用UTF-8字符集將字節(jié)數(shù)組轉(zhuǎn)換成字符串System.out.println(str); // 你好/*示例二:用UTF-8編碼,用UTF-8編碼,再用ISO8859-1(拉丁字符集)解碼,再用ISO8859-1編碼,最后用UTF-8解碼,可以再轉(zhuǎn)換成相應(yīng)的中文。注:ISO8859-1沒有中文字符集,會將中文字符轉(zhuǎn)換成不能識別的字符,然后可以再通過編碼轉(zhuǎn)換成原來的字節(jié)數(shù)組,再經(jīng)過UTF-8解碼成原有的中文。*/bytes = str.getBytes("UTF-8"); // 用UTF-8字符集將“你好”轉(zhuǎn)換成字節(jié)數(shù)組System.out.println(Arrays.toString(bytes)); // [-28, -67, -96, -27, -91, -67]str = new String(bytes, "ISO8859-1"); // ISO8859-1字符集會將一個字節(jié)轉(zhuǎn)換為一個漢字,但由于此字符集中沒有中文,所以會出現(xiàn)亂碼的情況System.out.println(str); // 打印結(jié)果:?? ?¥?bytes = str.getBytes("ISO8859-1"); // 再將轉(zhuǎn)換后的亂碼重新編碼,此時又會得到原來的字節(jié)數(shù)組str = new String(bytes, "UTF-8"); // 再經(jīng)UTF-8解碼以后,又會得到原來的漢字System.out.println(str); // 打印:你好/*示例三:用GBK編碼,用UTF-8解碼兩種字符集都有漢字編碼但是GBK字符集一個漢字會轉(zhuǎn)換成兩個字節(jié),而UTF-8字符集有可能是一個,有可能是兩個,也有可能是三個那么,UTF-8是怎么確定該字符是由一個字節(jié)還是兩個或者三個字節(jié)來組成的呢?它會根據(jù)字節(jié)數(shù)組的標(biāo)頭來判斷:(轉(zhuǎn)換成二進制后)'\u0001' 到 '\u007F' 范圍內(nèi)的所有字符都是用單個字節(jié)表示的:即第一個字節(jié)以0開頭,那么該字符由一個字節(jié)組成null 字符 '\u0000' 以及從 '\u0080' 到 '\u07FF' 的范圍內(nèi)的字符用兩個字節(jié)表示:即第一個字節(jié)以110開頭,且下一個二進制數(shù)以10開頭,那么該字符由兩個字節(jié)組成'\u0800' 到 '\uFFFF' 范圍內(nèi)的 char 值用三個字節(jié)表示:即第一個字節(jié)以111開頭,且后兩個字節(jié)以10開頭,那么該字符由三個字節(jié)組成*/bytes = str.getBytes("GBK"); // GBK的漢字編碼將一個字符轉(zhuǎn)換為兩個字節(jié): [-60, -29, -70, -61]System.out.println(Arrays.toString(bytes)); // [-60, -29, -70, -61]str = new String(bytes, "UTF-8");System.out.println(str); // 打印結(jié)果:���// 注:再將錯誤的字符用UTF-8編碼后,并不能再得到原來的數(shù)組,因為在最初的解碼時,UTF-8字符集會用一個相似的字符去代替不能正確解碼的字符,// 所以再用UTF-8編碼時并不能再得到原來的字節(jié)數(shù)組,繼而用原有的字符集解碼不能再得到原來的漢字bytes = str.getBytes("UTF-8");System.out.println(Arrays.toString(bytes)); // 打印:[-17, -65, -67, -17, -65, -67, -17, -65, -67]str = new String(bytes, "GBK");System.out.println(str); // 打印: 錕斤拷錕�}
}
總結(jié)
以上是生活随笔為你收集整理的java编码问题详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利达主机联网接线端子_门禁主机接门锁和开
- 下一篇: 刷magisk模块后不能开机_联想启天商