問題:機器特徵碼通過網絡傳輸以後,‘+’都變成了‘ ’服務器
詳情:機器特徵碼提取了機器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();
就能夠不用在服務端作醜陋的替換了。