有人說Java中中文字符占2個字節,也有人說占3個字節,甚至還有人說占4個字節;
有人說Java中英文字符占1個字節,也有人說占2個字節,甚至還有人說占4個字節;
那么到底誰說的對?我的回答是都沒錯,具體要看是什么編碼方式。紙上得來終覺淺,絕知此事要躬行,我編寫了下邊的代碼,運行輸出的結果就是答案。
代碼如下:
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("非法編碼格式!");
}
}
}
運行結果:
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