首先我使用的開發(fā)環(huán)境是Eclipse.創(chuàng)建一個(gè)Java Project默認(rèn)的編碼則為GBK,如圖:
下面便是具體代碼:
import java.io.UnsupportedEncodingException;public class Demo1 { public static void main(String[] args) throws UnsupportedEncodingException { String s = "我愛ABC"; byte[] bytes1 = s.getBytes("gbk");//不寫編碼,則使用平臺的默認(rèn)字符集將此 String 編碼為 byte序列,并返回byte[]. //s.getBytes(Charset charset) 使用給定的charset將此String編碼到byte序列; //返回的是一個(gè)byte[]字節(jié)數(shù)組 for(byte b: bytes1){ System.out.print(Integer.toHexString(b&0xff)+" "); //Integer.toHexString(int i)以十六進(jìn)制(基數(shù) 16)無符號整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式 } //gbk編碼中文占有兩個(gè)字節(jié),英文占有一個(gè)字節(jié) System.out.println(); byte[] bytes2 = s.getBytes("utf-8"); for(byte b: bytes2){ System.out.print(Integer.toHexString(b&0xff)+" "); } //utf-8編碼 中文占有三個(gè)字節(jié),英文占有一個(gè)字節(jié) System.out.println(); //java是雙字節(jié)編碼 --->utf-16be >> 中文和英文都占有兩個(gè)字節(jié) byte[] bytes3 = s.getBytes("utf-16be"); for(byte b: bytes3){ System.out.print(Integer.toHexString(b&0xff)+" "); } /*當(dāng)你的字節(jié)序列是某種編碼時(shí),這個(gè)時(shí)候想把字節(jié)序列變成 *字符串,也需要用這種編碼方式,否則會出現(xiàn)亂碼 * */ System.out.println(); String str1 = new String(bytes3);//用項(xiàng)目默認(rèn)的編碼即(GBK編碼) ----->> bytes3在上面定義成“utf-16be”的編碼了,所以會出現(xiàn)亂碼 System.out.println(str1); System.out.println(); String str2 = new String(bytes3,"utf-16be"); System.out.println(str2); /* * 文本文件就是字節(jié)序列 * 可以是任意編碼的字節(jié)序列 * 如果我們在中文機(jī)器上直接創(chuàng)建文本文件,那么該文本文件只認(rèn)識ansi編碼 * */ }}
打印的結(jié)果:
總的來說,編碼必須對應(yīng),不然會出現(xiàn)亂碼。
新聞熱點(diǎn)
疑難解答
圖片精選