有人說(shuō)Java中中文字符占2個(gè)字節(jié)绳军,也有人說(shuō)占3個(gè)字節(jié),甚至還有人說(shuō)占4個(gè)字節(jié)矢腻;
有人說(shuō)Java中英文字符占1個(gè)字節(jié)门驾,也有人說(shuō)占2個(gè)字節(jié),甚至還有人說(shuō)占4個(gè)字節(jié)多柑;
那么到底誰(shuí)說(shuō)的對(duì)奶是?我的回答是都沒(méi)錯(cuò),具體要看是什么編碼方式竣灌。紙上得來(lái)終覺(jué)淺聂沙,絕知此事要躬行,我編寫了下邊的代碼初嘹,運(yùn)行輸出的結(jié)果就是答案及汉。
代碼如下:
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類的不帶參數(shù)的getBytes()方法會(huì)以程序所運(yùn)行平臺(tái)的默認(rèn)編碼方式為準(zhǔn)來(lái)進(jìn)行轉(zhuǎn)換,
* 在不同環(huán)境下可能會(huì)有不同的結(jié)果屯烦,因此建議使用指定編碼方式的getBytes(String charsetName)方法豁生。
*/
public static void printByteLength(String charsetName){
String en="a"; //一個(gè)英文字符
String zh="啊"; //一個(gè)中文字符
try {
System.out.println(charsetName+"編碼英文字符所占字節(jié)數(shù):"+en.getBytes(charsetName).length);
System.out.println(charsetName+"編碼中文字符所占字節(jié)數(shù):"+zh.getBytes(charsetName).length);
System.out.println();
} catch (UnsupportedEncodingException e) {
System.out.println("非法編碼格式兔毒!");
}
}
}
運(yùn)行結(jié)果:
UTF-8編碼英文字符所占字節(jié)數(shù):1
UTF-8編碼中文字符所占字節(jié)數(shù):3
UTF-16編碼英文字符所占字節(jié)數(shù):4
UTF-16編碼中文字符所占字節(jié)數(shù):4
UTF-16BE編碼英文字符所占字節(jié)數(shù):2
UTF-16BE編碼中文字符所占字節(jié)數(shù):2
UTF-16LE編碼英文字符所占字節(jié)數(shù):2
UTF-16LE編碼中文字符所占字節(jié)數(shù):2
UTF-32編碼英文字符所占字節(jié)數(shù):4
UTF-32編碼中文字符所占字節(jié)數(shù):4
UTF-32BE編碼英文字符所占字節(jié)數(shù):4
UTF-32BE編碼中文字符所占字節(jié)數(shù):4
UTF-32LE編碼英文字符所占字節(jié)數(shù):4
UTF-32LE編碼中文字符所占字節(jié)數(shù):4
UNICODE編碼英文字符所占字節(jié)數(shù):4
UNICODE編碼中文字符所占字節(jié)數(shù):4
GBK編碼英文字符所占字節(jié)數(shù):1
GBK編碼中文字符所占字節(jié)數(shù):2
GB2312編碼英文字符所占字節(jié)數(shù):1
GB2312編碼中文字符所占字節(jié)數(shù):2
GB18030編碼英文字符所占字節(jié)數(shù):1
GB18030編碼中文字符所占字節(jié)數(shù):2
ISO8859-1編碼英文字符所占字節(jié)數(shù):1
ISO8859-1編碼中文字符所占字節(jié)數(shù):1
BIG5編碼英文字符所占字節(jié)數(shù):1
BIG5編碼中文字符所占字節(jié)數(shù):2
ASCII編碼英文字符所占字節(jié)數(shù):1
ASCII編碼中文字符所占字節(jié)數(shù):1