前言
在用Postman調(diào)接口給對(duì)方發(fā)參數(shù)的時(shí)候,對(duì)方反應(yīng)含中文參數(shù)的字段信息部分亂碼(即中文亂碼,數(shù)字等正常)。本文介紹了如何解決這個(gè)問題。
一、Base64是什么?
以下部分內(nèi)容來(lái)自:
Base64用法參考:jdk1.8——Base64
Base64內(nèi)容介紹: 淺談Base64編碼規(guī)則
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,在了解Base64編碼之前,先了解幾個(gè)基本概念:位、字節(jié)。
位:"位(bit)"是計(jì)算機(jī)中最小的數(shù)據(jù)單位。每一位的狀態(tài)只能是0或1;
字節(jié):8個(gè)二進(jìn)制位構(gòu)成1個(gè)"字節(jié)(Byte)",字節(jié)是存儲(chǔ)空間的基本計(jì)量單位。1個(gè)字節(jié)可以儲(chǔ)存1個(gè)英文字母,2個(gè)字節(jié)可以存儲(chǔ)1個(gè)漢字;
因?yàn)橛行┚W(wǎng)絡(luò)傳送渠道并不支持所有的字節(jié),例如傳統(tǒng)的郵件只支持可見字符的傳送,像ASCII碼的控制字符就不能通過(guò)郵件傳送。這樣就受到了很大的限制,比如圖片二進(jìn)制流的每個(gè)字節(jié)不可能全部是可見字符,所以就傳送不了。最好的方法就是在不改變傳統(tǒng)協(xié)議的情況下,開辟一種新的方案來(lái)支持二進(jìn)制文件的傳送。把不可見字符用可見字符來(lái)表示。而Base64就是一種基于64個(gè)可見字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法。
擴(kuò)展:不可見字符其實(shí)并不是不顯示,只是這些字符在屏幕上顯示不出來(lái),比如:換行符、回車、退格…字符。
二、問題解決
中文亂碼的根本問題還是在于編碼規(guī)則不同,同一信息通過(guò)不同編碼規(guī)則轉(zhuǎn)換時(shí)就可能會(huì)出現(xiàn)亂碼。尤其是中文,亂碼的可能性比英文和數(shù)字大的多。
Base64在轉(zhuǎn)碼的時(shí)候,是對(duì)字節(jié)數(shù)組(byte [])進(jìn)行轉(zhuǎn)碼,常見方法如圖所示
而我們?cè)?strong>SpringBoot中,傳參設(shè)置流程一般如下:
(1)先創(chuàng)建model對(duì)象,利用set() 方法填寫相關(guān)信息
(2)再用JSON.toJSONString() 方法將model 對(duì)象轉(zhuǎn)為String 類型
(3)最后利用String.getBytes() 方法轉(zhuǎn)成字節(jié)數(shù)組,再傳入Base64加密方法中
在這里,為了解決中文亂碼問題,我在轉(zhuǎn)成字節(jié)數(shù)組的時(shí)候設(shè)置編碼規(guī)則為UTF-8,而不是默認(rèn)編碼規(guī)則,即可解決。
具體代碼如下:
String params=JSON.toJSONString(model);
String sendContent=Base64Util.encode(params.getBytes("UTF-8"));
當(dāng)然,這里是強(qiáng)制轉(zhuǎn)換為UTF-8編碼,具體編碼規(guī)則可以按照自己的需求設(shè)定。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440770.html
總結(jié)
本文介紹了如何在Base64轉(zhuǎn)碼前,在生成字節(jié)數(shù)組的時(shí)候進(jìn)行編碼規(guī)則的設(shè)定,以解決亂碼問題。
希望對(duì)大家有用!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440770.html
到了這里,關(guān)于Base64:含中文參數(shù)轉(zhuǎn)碼,對(duì)方接受參數(shù)解碼后,中文信息亂碼的解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!