base64出現空格問題的解決方案

2021-09-24 19:51:10 字數 2994 閱讀 8305

專案中有乙個引數是 byte,在構建 http請求的時候不便引數的傳輸,於是就想到了 使用base64進行編碼之後當成字串進行傳輸。

接下來就用自己寫了乙個http工具類,**如下(片段):

/**

* 引數方式post傳送 .

* * @param ******httprequest 請求

* @return 響應

}

專案啟動之後,引數都傳遞過去了,沒什麼毛病。但是呢,會出現乙個問題,byte 用base64編碼之後可能會出現一些 「+」 加號,使用自定義的 httputils 請求的時候,會把 「+」 變成空格。

使用base64編碼之後的 byte字串

xrxzsko4/osh1thokozybfigk0nq5vjp3rksspa8y9eplsdmmztv+jw94v7bcu/28eam6u1i9mse

swfrs5jrhyxqvpztmxk6y/77qr7ruclpp4a+txoycdhksa/agxlua6gsvuqadshnnq1pwbzsklds

lmdtf1igcr**syzxtnu=

使用httputils 獲取的 byte 字串

xrxzsko4/osh1thokozybfigk0nq5vjp3rksspa8y9eplsdmmztv jw94v7bcu/28eam6u1i9mse

swfrs5jrhyxqvpztmxk6y/77qr7ruclpp4a txoycdhksa/agxlua6gsvuqadshnnq1pwbzsklds

lmdtf1igcr**syzxtnu=

問題的原因找到了,那接下來如何解決呢?

解決方案 一

將加密後的空格全部替換為 『+』 號,replace(「 「, 「+」);

或者,將將加密後的字串替換為 「%2b」, 再將 「%2b」替換回 『+』 號,replace(「%2b」, 「+」)

解決方案 二

使用 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;

}

使用 post請求json引數這個方法,具體**:

;以上兩種解決方法,均可以解決這個問題。

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,將它加入開...