<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文讀懂Base64編碼

          共 2495字,需瀏覽 5分鐘

           ·

          2021-09-14 21:07

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          Base64編碼

          字符對(duì)應(yīng)表

          上表就是用來表示Base64,一共64個(gè)字符,A-Z,a-z,0-9,+,/(上表打錯(cuò)了),還有=(作為補(bǔ)位)
          無論將文件,字符串,還是什么轉(zhuǎn)為Base64,一定是用上表的字符表示。

          轉(zhuǎn)換方式是將三個(gè)字節(jié)分為一個(gè)單元,因?yàn)橐粋€(gè)字節(jié)占8位,所以一個(gè)單元就是24位,然后將一個(gè)單元又分為四個(gè)部分,每一部分 是6位,在每個(gè)部分前面補(bǔ)00,于是一個(gè)單元就變成了32位,也就是4個(gè)字節(jié),然后算出每一部分的十進(jìn)制,再對(duì)應(yīng)Base64字符對(duì)應(yīng)表上面的 符號(hào),一單元的四個(gè)部分加起來就是Base64,說得比較抽象,我們用圖來說話

          如上圖我們對(duì)字符串"LIU"進(jìn)行Base64編碼,因?yàn)閯偤脼?個(gè)字節(jié),所以為一個(gè)單元,LIU對(duì)應(yīng)的ASCII碼為76,73,85,對(duì)應(yīng)的二進(jìn)制分別為 01001100,01001001,01010101,然后將其分為四部分并補(bǔ)0后為,00010011,00000100,00100101,00010101,它們所對(duì)應(yīng)的Base64 索引和字符為,19(T) , 4(E) , 37(l) , 21(V) , 所以"LIU"編譯后的Base64編碼為"TElV"

          如果是兩個(gè)字節(jié)

          兩個(gè)字節(jié)的情況分為三組,第三組只有四位(1001),這時(shí)候要再首尾都加2個(gè)0,為(00100100),計(jì)算出來是 TEk ,因?yàn)橹挥袃蓚€(gè)字節(jié),所以第三個(gè)用=代替,加上=, 為 TEk=

          如果一個(gè)字節(jié)


          一個(gè)字節(jié)則分為兩組,第二組為00,前面補(bǔ)00,后面補(bǔ)0000,為(00000000),在Base64上面對(duì)應(yīng)A,所以為"TA",因?yàn)闉橐粋€(gè)字節(jié),所以后兩個(gè)用==代替,為 TA==

          漢字轉(zhuǎn)為Base64編碼

          對(duì)于漢字轉(zhuǎn)Base64編碼,首先要確定編碼方式,又utf-8,utf-16,utf-32,gbk等等,每種編碼的漢字對(duì)應(yīng)的Base64是不相同的,比如"劉"的編碼方式為utf-8 ,那么用Base64編碼后為5YiY,如果編碼方式為utf-16,那么經(jīng)過Base64編碼后為/v9SGA==,所以不同的編碼方式對(duì)應(yīng)不同的Base64編碼, 如果用utf-8編碼的文字轉(zhuǎn)為Base64編碼,用utf-16對(duì)Base64進(jìn)行解碼,那么解碼得到的將為亂碼。

          JAVA API

          編碼

          Base64.getEncoder().encode(byte[] bytes);  
          Base64.getEncoder().encodeToString(byte[] bytes);  
          and so on

          解碼

          Base64.getDecoder().decode(byte[] bytes);  
          and so on

          示例

          /**
           * TODO
           *
           * @author 劉牌
           * @version 1.0
           * @date 2021/9/7 0007 21:25
           */
          public class Base64Test {
              public static void main(String[] args) {
                  String str = "LIU";
                  String s = Base64.getEncoder().encodeToString(str.getBytes(Charset.forName("utf-16")));
                  System.out.println(s);
                  byte[] bytes = Base64.getDecoder().decode(s.getBytes());
                  String s1 = new String(bytes, Charset.forName("utf-16"));
                  System.out.println(s1);
              }
          }


            作者 |  渣男小四

          來源 |  cnblogs.com/steakliu/p/15240813.html


          加鋒哥微信: java1239  
          圍觀鋒哥朋友圈,每天推送Java干貨!

          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  2000年国一级黄片 | 九七香蕉视频 | 国产成人无码精品A级毛片抽搐 | 国产黄片精品 | 十八禁免费观看网站 |