專案中有乙個引數是 byte,在構建 http請求的時候不便引數的傳輸,於是就想到了 使用base64進行編碼之後當成字串進行傳輸。
接下來就用自己寫了乙個http工具類,**如下(片段):
專案啟動之後,引數都傳遞過去了,沒什麼毛病。但是呢,會出現乙個問題,byte 用base64編碼之後可能會出現一些 「+」 加號,使用自定義的 httputils 請求的時候,會把 「+」 變成空格。/**
* 引數方式post傳送 .
* * @param ******httprequest 請求
* @return 響應
}
使用base64編碼之後的 byte字串
使用httputils 獲取的 byte 字串xrxzsko4/osh1thokozybfigk0nq5vjp3rksspa8y9eplsdmmztv+jw94v7bcu/28eam6u1i9mse
swfrs5jrhyxqvpztmxk6y/77qr7ruclpp4a+txoycdhksa/agxlua6gsvuqadshnnq1pwbzsklds
lmdtf1igcr**syzxtnu=
問題的原因找到了,那接下來如何解決呢?xrxzsko4/osh1thokozybfigk0nq5vjp3rksspa8y9eplsdmmztv jw94v7bcu/28eam6u1i9mse
swfrs5jrhyxqvpztmxk6y/77qr7ruclpp4a txoycdhksa/agxlua6gsvuqadshnnq1pwbzsklds
lmdtf1igcr**syzxtnu=
解決方案 一
將加密後的空格全部替換為 『+』 號,replace(「 「, 「+」);
或者,將將加密後的字串替換為 「%2b」, 再將 「%2b」替換回 『+』 號,replace(「%2b」, 「+」)
解決方案 二
使用 post方式提交的時候,引數為 json形式。
具體**如下:
使用 post請求json引數這個方法,具體**:/**
* post請求 json引數
* @param url 請求位址
* @param params json引數
* @return
*/public
static string dopost
(string url, jsonobject params)
finally
}catch
(clientprotocolexception e)
catch
(unsupportedencodingexception e)
catch
(ioexception e)
finally
catch
(exception e)
}return strresult;
}
;以上兩種解決方法,均可以解決這個問題。
base64編碼,解碼我用的是 sun.misc.base64decoder
開始我還以為 切換成 其他的 base64 類庫就不會有這個問題,我嘗試了apache commons codec的base64 然後編碼出來的字串是一樣的。
純屬工作筆記記錄,如有錯誤,煩請指出!
base64出現空格的問題
如 將一串引數做了base64後直接作為url的一部分傳送出去了。要知道base64的演算法有pad,crcf的控制選項,而又很湊巧,發使用的是none,即pading部分帶有crcf,這樣乙個正常的引數輸入,會產生類似於 ancdfdsfdsfdsfsadfasfsafafdsafadsfsafa...
Base64編碼的中文編碼問題
base64編碼和解碼在處理英文的時候沒有問題,處理中文的時候暗藏陷阱!原因是base64在處理字串的時候使用平台的預設編碼方式。base64 b64 new base64 string s new string b64.encode content 如果content是中文,那麼new strin...
全志A64出現的問題記錄
二.新增驅動 使用date檢視時間是utc時間而不是cst時間,正好差八個小時,解決如下 將ubuntu系統下面的 usr share zoneinfo asia shanghai檔案複製到開發板 etc下,並更名為localtime,執行hwclocks s。主要是hwclocks s,將它加入開...