記一個Base64編碼後經網絡傳輸產生的問題

問題:機器特徵碼通過網絡傳輸以後,‘+’都變成了‘ ’服務器

詳情:機器特徵碼提取了機器cpuId和mac地址信息,最後通過Base64編碼後生成的字符串,一開始我使用的是網絡

String strs = new BASE64Encoder().encode(bt);

來編碼,編碼後的字符串形如:Wc6zkdzzR3wd7/pcDWR3MmJdH6+bgbQoUH7w3q6zRsJVt6+I8XoBhg==編碼

當把這個字符串經過參數的形式上傳到服務器時,發現服務端收到的字符串全部的‘+’都變成了‘ ’,code

如:Wc6zkdzzR3wd7/pcDWR3MmJdH6 bgbQoUH7w3q6zRsJVt6 I8XoBhg==字符串

如何解決:一開始在服務端,強行作了字符串替換,今天早上在看Java 8新特性的時候,發現Base64其實提供了三種編解碼,分別是基本,URL, MIME。get

因此聯想到以前的這個問題,是否是能夠用URL的Encoder和Decoder來替換原來的BASE64Encoder 和 BASE64Decoder,果真,cpu

String strs = Base64.getUrlEncoder().encodeToString(bt);

得到的機器碼變成了:服務端

Wc6zkdzzR3wd7_pcDWR3MmJdH6-bgbQoUH7w3q6zRsJVt6-I8XoBhg==co

‘/’和‘+’這種不適合網絡傳輸的字符沒有了,分別被‘_’和‘-’所取代了。字符

只要decoder也換成對應的

Base64.Decoder decoder = Base64.getUrlDecoder();

就能夠不用在服務端作醜陋的替換了。

相關文章
相關標籤/搜索