有人說Java中中文字符佔2個字節,也有人說佔3個字節,甚至還有人說佔4個字節;css
有人說Java中英文字符佔1個字節,也有人說佔2個字節,甚至還有人說佔4個字節;java
那麼到底誰說的對?個人回答是都沒錯,具體要看是什麼編碼方式。紙上得來終覺淺,絕知此事要躬行,我編寫了下邊的代碼,運行輸出的結果就是答案。編碼
代碼以下:spa
public class Test {
public static void main(String[] args){
String[] charsetNames={
"UTF-8",
"UTF-16",
"UTF-16BE",
"UTF-16LE",
"UTF-32",
"UTF-32BE",
"UTF-32LE",
"UNICODE",
"GBK",
"GB2312",
"GB18030",
"ISO8859-1",
"BIG5",
"ASCII"
};
for(int i=0;i<charsetNames.length;i++){
printByteLength(charsetNames[i]);
}
}
/** * String類的不帶參數的getBytes()方法會以程序所運行平臺的默認編碼方式爲準來進行轉換, * 在不一樣環境下可能會有不一樣的結果,所以建議使用指定編碼方式的getBytes(String charsetName)方法。 */
public static void printByteLength(String charsetName){
String en="a"; //一個英文字符
String zh="啊"; //一箇中文字符
try {
System.out.println(charsetName+"編碼英文字符所佔字節數:"+en.getBytes(charsetName).length);
System.out.println(charsetName+"編碼中文字符所佔字節數:"+zh.getBytes(charsetName).length);
System.out.println();
} catch (UnsupportedEncodingException e) {
System.out.println("非法編碼格式!");
}
}
}
複製代碼
運行結果:code
UTF-8編碼英文字符所佔字節數:1
UTF-8編碼中文字符所佔字節數:3
UTF-16編碼英文字符所佔字節數:4
UTF-16編碼中文字符所佔字節數:4
UTF-16BE編碼英文字符所佔字節數:2
UTF-16BE編碼中文字符所佔字節數:2
UTF-16LE編碼英文字符所佔字節數:2
UTF-16LE編碼中文字符所佔字節數:2
UTF-32編碼英文字符所佔字節數:4
UTF-32編碼中文字符所佔字節數:4
UTF-32BE編碼英文字符所佔字節數:4
UTF-32BE編碼中文字符所佔字節數:4
UTF-32LE編碼英文字符所佔字節數:4
UTF-32LE編碼中文字符所佔字節數:4
UNICODE編碼英文字符所佔字節數:4
UNICODE編碼中文字符所佔字節數:4
GBK編碼英文字符所佔字節數:1
GBK編碼中文字符所佔字節數:2
GB2312編碼英文字符所佔字節數:1
GB2312編碼中文字符所佔字節數:2
GB18030編碼英文字符所佔字節數:1
GB18030編碼中文字符所佔字節數:2
ISO8859-1編碼英文字符所佔字節數:1
ISO8859-1編碼中文字符所佔字節數:1
BIG5編碼英文字符所佔字節數:1
BIG5編碼中文字符所佔字節數:2
ASCII編碼英文字符所佔字節數:1
ASCII編碼中文字符所佔字節數:1複製代碼