91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java 字符編碼與解碼

發布時間:2020-07-25 10:16:10 來源:網絡 閱讀:300 作者:zsdnr 欄目:建站服務器

1、字符編碼的發展歷程

  ①、ASCII 碼

  因為計算機只認識數字,所以我們在計算機里面的一切數據都是以數字來表示,因為英文字符有限,所以規定使用的字節的最高位是 0,每一個字節都是以 0-127 之間的數字來表示。比如 A 對應 65,a 對應 97。這便是 美國標準信息交換碼,ASCII

1
2
3
String str = new String("Aa");
byte[] strASCII = str.getBytes("ASCII");
System.out.println(Arrays.toString(strASCII));//[65, 97]

  

  ②、GB2312 碼

  隨著計算機在全球的普及,很多國家和地區都把自己的字符引入了計算機,比如漢字。此時發現一個字節能表示的數字范圍太小,不能包含所有的中文漢字。那么就規定使用兩個字節來表示一個漢字。

  規定:原有的 ASCII 字符的編碼保持不變,仍然使用一個字節表示,為了區別一個中文字符與兩個 ASCII 碼字符相區別。中文字符的每個字節最高位規定為 1(即中文的二進制是負數),這便是 GB2312 編碼

1
2
3
String str = new String("Aa帥鍋");
byte[] strASCII = str.getBytes("GB2312");
System.out.println(Arrays.toString(strASCII));//[65, 97, -53, -89, -71, -8]

  

  ③、GBK

  由于中國漢字太多,在 GB2312 的基礎上增加了更多的中文字符,這種編碼是 GBK

 

問題:如果只是在中國,那么大家都認識漢字,但是如果是別的國家,而該國家的碼表中是沒有收錄漢字的。那么計算機在顯示的時候就為亂碼或是別的字符

 

解決辦法:為了解決各個國家因為本地化字符編碼帶來的影響,就把全世界所有的字符統一進行編碼---Unicode 編碼

     此時某一個字符在全世界任何地方顯示都是固定的,比如漢字 哥,在任何地方都是以十六進制 54E5 來表示。

     Unicode 的字符編碼都占有兩個字節

 

  ④、UTF-8

  是一種針對 Unicode 的可變長度字符編碼,又稱為 萬國碼,是 Unicode 的實現方式之一。編碼中的第一個字節仍與 ASCII 兼容,這使得原來處理 ASCII 字符的軟件無須或只需做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或傳送文字的應用中,優先采用的編碼。互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持 UTF-8 編碼

1
2
3
String str = new String("Aa帥鍋");
byte[] strASCII = str.getBytes("UTF-8");
System.out.println(Arrays.toString(strASCII));//[65, 97, -27, -72, -123, -23, -108, -123]

  

 

存儲字母、數字:無論什么字符集都占有 1 個字節

存儲漢字:GBK 家族占有 2 個字節。UTF-8 占有 3 個字節

       不能使用單字節的字符集(ASCII/ISO-8859-1)來存儲中文

 

 

 

2、字符的編碼和解碼

  信息在計算機網絡中傳輸是以字節的形式。那么如何變為字節?這就是編碼的過程。那么計算機接收了這個編碼,如何讓使用者認識呢?那必須要將字節轉換為人所識別的字符串形式,這就是解碼的過程。

 

  編碼:將字符串轉換為 byte 數組

  解碼:把 byte 數組轉換為 字符串

注意:①、編碼格式和解碼格式必須一致,否則亂碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String str = new String("Aa帥鍋");
        //編碼操作
        byte[] strByte = str.getBytes("GBK");
        System.out.println(Arrays.toString(strByte));//[65, 97, -53, -89, -71, -8]
         
        //解碼操作 
        //注意編碼的字符集和解碼的字符集格式必須一致(是其擴展字符集也可以),否則會亂碼
        //第一種:編碼格式為 GBK,解碼格式為 ISO-8859-1  那么就會亂碼
        String str2 = new String(strByte,"ISO-8859-1");
        System.out.println(str2); //Aa?§??
         
        //第二種:編碼和解碼格式一致
        String str3 = new String(strByte,"GBK");
        System.out.println(str3); //Aa帥鍋

  ②、有時候編碼為和解碼格式一致了,但是還是亂碼,這是因為在數據在傳輸過程中經過服務器的處理,而這個服務器可能是外國人編寫的,那么就會將數據轉換為 別的字符格式,那么你如果還是直接轉為自己想要的格式是會亂碼的。

  解決辦法:先獲取經過服務器之后的數據還原編碼,然后在進行解碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String str = new String("Aa帥鍋");
        //編碼操作
        byte[] strByte = str.getBytes("UTF-8");
        System.out.println(Arrays.toString(strByte));//[65, 97, -27, -72, -123, -23, -108, -123]
         
         
        //中間經過了服務器的傳輸,編碼格式轉成了 ISO-8859-1
        String str2 = new String(strByte,"ISO-8859-1");
         
        //解碼操作  ,此時如果直接進行解碼,那么會亂碼
        String str3 = new String(str2.getBytes(),"UTF-8");
        System.out.println(str3); //Aa???????
         
        //對于上面的亂碼,我們必須先還原服務器之前的編碼格式,然后在進行解碼。那么就不會亂碼
        byte[] strByte2 = str2.getBytes("ISO-8859-1");
        String str4 = new String(strByte2,"UTF-8");
        System.out.println(str4); //Aa帥鍋

  


向AI問一下細節

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

AI

新绛县| 淳安县| 宁安市| 钟祥市| 永修县| 新乡县| 炎陵县| 黄平县| 南木林县| 泽普县| 丰台区| 凤冈县| 广安市| 崇左市| 云梦县| 乌鲁木齐市| 乌什县| 德钦县| 胶州市| 临洮县| 永安市| 清镇市| 辉南县| 西平县| 南郑县| 皋兰县| 上栗县| 武宣县| 遂昌县| 翁源县| 崇明县| 绍兴县| 建始县| 乌拉特后旗| 松阳县| 乡宁县| 江达县| 乐昌市| 霍林郭勒市| 常州市| 贺兰县|