欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
初學(xué)入門(mén):JAVA里字符編碼的探索與理解 - 全部文章 - 技術(shù)學(xué)習
初學(xué)入門(mén):JAVA里字符編碼的探索與理解 一起學(xué)習 今天終于把JAVA里一個(gè)比較頭痛的問(wèn)題——字符編碼弄清晰了,所以寫(xiě)一篇文章來(lái)紀念一下,也為大家提供一點(diǎn)自己的心得。
眾所周知,JAVA為了國際通用,用的是UNICODE來(lái)保存里面的字符。而UNICODE只是一個(gè)種字符集,字符的存儲和表示要用到一定的字符編碼格式,而與UNICODE對應的字符編碼格式就是我們??吹降腢TF-8,UTF-16等等,而UTF-8是最常用的,所以人們常常把它和UNICODE等同起來(lái)(我以前就是這樣的),這在某些情況下是沒(méi)有錯的,但這樣的理解在JAVA里就會(huì )產(chǎn)生一些混淆。我們用下面的程序來(lái)演示一下。
定義一個(gè)字符串
String name = "堂";
這個(gè)字符串就一個(gè)字符,把它取出來(lái)
char c_name = name.charAt(0);
JAVA里的char型是十六位的(兩個(gè)字節),但是如果是用UTF-8的話(huà)可能會(huì )不只兩位(UTF-8是變長(cháng)存儲的),那看來(lái)JAVA本身并不是用UTF-8來(lái)保存的,口說(shuō)無(wú)憑,做個(gè)實(shí)驗吧。
首先看看char里保存的內容   int low = (c_name) & 0xff;//取c_name的低位
int high = (c_name >> 8) & 0xff;//取c_name的高位
System.out.println(Integer.toHexString(high) " " Integer.toHexString(low));
結果是58 02
只有兩個(gè)字節而已(16位),那么真正的UTF-8編碼的內容是什么呢,再看看吧。
為了方便,我寫(xiě)了一個(gè)輔助方法printbyte,作用是把一個(gè)byte數組的每個(gè)元素按照十六進(jìn)制格式打印出來(lái),同樣為了方便,我把它作為靜態(tài)方法。
public static void printbyte(byte[] bt)
{
for (int i = 0; i < bt.length; i )
{
int hex = (int)bt[i] & 0xff;
System.out.print(Integer.toHexString(hex) " ");
}
System.out.println(" length = " bt.length);
}
byte[] utf_8 = name.getBytes("utf-8");
printbyte(utf_8);
結果是e5 a0 82 length = 3
哇,三個(gè)字節!看來(lái)JAVA內部用的真不是UTF-8,那用的是什么呢?UTF-16?看一下便知?! ?byte[] utf_16 = name.getBytes("utf-16");
printbyte(utf_16);
結果是fe ff 58 02 length = 4,靠,四個(gè)字節了。咦?后面的低16位不正是和開(kāi)始c_name的十六進(jìn)制表示一樣的嗎?看來(lái)JAVA真正的內部字符編碼和UTF-16有或多或少的聯(lián)系。JAVA內部究竟是用的什么字符編碼呢?這個(gè)問(wèn)題我也找了很久,后來(lái)在THINK IN JAVA 3rd的12章里看到一個(gè)例子出現了UTF-16BE,難道是它?   byte[] utf_16be = name.getBytes("utf-16be");
printbyte(utf_16be);
結果出來(lái)了:58 02 length = 2
哈哈,I got it!不多不少兩個(gè)字節,內容也一樣。果然是它。同時(shí)我在里面也看到,UNICODE的編碼還有一個(gè)LE,這里的BE,LE我想應該是bigendian和littleendian吧。
今天終于把JAVA里一個(gè)比較頭痛的問(wèn)題——字符編碼弄清晰了,所以寫(xiě)一篇文章來(lái)紀念一下,也為大家提供一點(diǎn)自己的心得。
眾所周知,JAVA為了國際通用,用的是UNICODE來(lái)保存里面的字符。而UNICODE只是一個(gè)種字符集,字符的存儲和表示要用到一定的字符編碼格式,而與UNICODE對應的字符編碼格式就是我們??吹降腢TF-8,UTF-16等等,而UTF-8是最常用的,所以人們常常把它和UNICODE等同起來(lái)(我以前就是這樣的),這在某些情況下是沒(méi)有錯的,但這樣的理解在JAVA里就會(huì )產(chǎn)生一些混淆。我們用下面的程序來(lái)演示一下。
定義一個(gè)字符串
String name = "堂";
這個(gè)字符串就一個(gè)字符,把它取出來(lái)
char c_name = name.charAt(0);
JAVA里的char型是十六位的(兩個(gè)字節),但是如果是用UTF-8的話(huà)可能會(huì )不只兩位(UTF-8是變長(cháng)存儲的),那看來(lái)JAVA本身并不是用UTF-8來(lái)保存的,口說(shuō)無(wú)憑,做個(gè)實(shí)驗吧。
首先看看char里保存的內容   int low = (c_name) & 0xff;//取c_name的低位
int high = (c_name >> 8) & 0xff;//取c_name的高位
System.out.println(Integer.toHexString(high) " " Integer.toHexString(low));
結果是58 02
只有兩個(gè)字節而已(16位),那么真正的UTF-8編碼的內容是什么呢,再看看吧。
為了方便,我寫(xiě)了一個(gè)輔助方法printbyte,作用是把一個(gè)byte數組的每個(gè)元素按照十六進(jìn)制格式打印出來(lái),同樣為了方便,我把它作為靜態(tài)方法。
public static void printbyte(byte[] bt)
{
for (int i = 0; i < bt.length; i )
{
int hex = (int)bt[i] & 0xff;
System.out.print(Integer.toHexString(hex) " ");
}
System.out.println(" length = " bt.length);
}
byte[] utf_8 = name.getBytes("utf-8");
printbyte(utf_8);
結果是e5 a0 82 length = 3
哇,三個(gè)字節!看來(lái)JAVA內部用的真不是UTF-8,那用的是什么呢?UTF-16?看一下便知?! ?byte[] utf_16 = name.getBytes("utf-16");
printbyte(utf_16);
結果是fe ff 58 02 length = 4,靠,四個(gè)字節了。咦?后面的低16位不正是和開(kāi)始c_name的十六進(jìn)制表示一樣的嗎?看來(lái)JAVA真正的內部字符編碼和UTF-16有或多或少的聯(lián)系。JAVA內部究竟是用的什么字符編碼呢?這個(gè)問(wèn)題我也找了很久,后來(lái)在THINK IN JAVA 3rd的12章里看到一個(gè)例子出現了UTF-16BE,難道是它?   byte[] utf_16be = name.getBytes("utf-16be");
printbyte(utf_16be);
結果出來(lái)了:58 02 length = 2
哈哈,I got it!不多不少兩個(gè)字節,內容也一樣。果然是它。同時(shí)我在里面也看到,UNICODE的編碼還有一個(gè)LE,這里的BE,LE我想應該是bigendian和littleendian吧。
一起學(xué)習 初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解初學(xué)入門(mén):JAVA里字符編碼的探索與理解
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JAVA里字符編碼 - Java - linxh
java亂碼問(wèn)題分析
CSDN 文檔中心:手機中文碼制問(wèn)題的一點(diǎn)理解
Java中文問(wèn)題詳解,底層編碼解剖
jni中字符轉換中文亂碼的處理方法
字符集編碼
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久