亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA里字符編碼的原理和使用

發布時間:2021-07-12 17:12:53 來源:億速云 閱讀:156 作者:chen 欄目:編程語言

這篇文章主要講解了“JAVA里字符編碼的原理和使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JAVA里字符編碼的原理和使用”吧!

眾所周知,JAVA為了國際通用,用的是UNICODE來保存里面的字符。而UNICODE只是一個種字符集,字符的存儲和表示要用到一定的字符編碼格式,而與UNICODE對應的字符編碼格式就是我們常看到的UTF-8,UTF-16等等,而UTF-8是最常用的,所以人們常常把它和UNICODE等同起來(我以前就是這樣的),這在某些情況下是沒有錯的,但這樣的理解在JAVA里就會產生一些混淆。我們用下面的程序來演示一下。

定義一個字符串

String name = "堂";

這個字符串就一個字符,把它取出來

char c_name = name.charAt(0);

JAVA里的char型是十六位的(兩個字節),但是如果是用UTF-8的話可能會不只兩位(UTF-8是變長存儲的),那看來JAVA本身并不是用UTF-8來保存的,口說無憑,做個實驗吧。

首先看看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

只有兩個字節而已(16位),那么真正的UTF-8編碼的內容是什么呢,再看看吧。

為了方便,我寫了一個輔助方法printbyte,作用是把一個byte數組的每個元素按照十六進制格式打印出來,同樣為了方便,我把它作為靜態方法。 

 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

哇,三個字節!看來JAVA內部用的真不是UTF-8,那用的是什么呢?UTF-16?看一下便知。

byte[] utf_16 = name.getBytes("utf-16");
printbyte(utf_16);

結果是fe ff 58 02 length = 4,靠,四個字節了。咦?后面的低16位不正是和開始c_name的十六進制表示一樣的嗎?看來JAVA真正的內部字符編碼和UTF-16有或多或少的聯系。JAVA內部究竟是用的什么字符編碼呢?這個問題我也找了很久,后來在THINK IN JAVA 3rd的12章里看到一個例子出現了UTF-16BE,難道是它?

byte[] utf_16be = name.getBytes("utf-16be");
printbyte(utf_16be);
結果出來了:58 02 length = 2

哈哈,I got it!不多不少兩個字節,內容也一樣。果然是它。同時我在里面也看到,UNICODE的編碼還有一個LE,這里的BE,LE我想應該是bigendian和littleendian吧。

感謝各位的閱讀,以上就是“JAVA里字符編碼的原理和使用”的內容了,經過本文的學習后,相信大家對JAVA里字符編碼的原理和使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浏阳市| 化州市| 清原| 新乐市| 沁源县| 深水埗区| 焦作市| 台东县| 上犹县| 昌黎县| 阿荣旗| 方城县| 阿勒泰市| 湖南省| 大足县| 旬阳县| 清徐县| 乌拉特前旗| 莆田市| 绥化市| 竹北市| 芒康县| 清新县| 重庆市| 临高县| 武冈市| 阿拉善右旗| 固阳县| 石楼县| 扶绥县| 新宁县| 阳谷县| 油尖旺区| 柘城县| 屏东市| 营山县| 涞源县| 大方县| 三河市| 广饶县| 广河县|