第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

字符集編碼問題

字符集編碼問題

暮色呼如 2019-04-19 16:29:43
下面這三段代碼在效果上有什么區(qū)別?使用2次utf-8//decodewithbase64togetbytesbyte[]dec=BASE64DecoderStream.decode(str.getBytes("UTF-8"));使用1次utf-8byte[]utf8=dcipher.doFinal(dec);//createnewstringbasedonthespecifiedcharsetreturnnewString(utf8,"UTF8");使用1次utf-8//decodewithbase64togetbytesbyte[]dec=BASE64DecoderStream.decode(str.getBytes());byte[]utf8=dcipher.doFinal(dec);//createnewstringbasedonthespecifiedcharsetreturnnewString(utf8,"UTF8");使用1次utf-8使用1次utf-8//decodewithbase64togetbytesbyte[]dec=BASE64DecoderStream.decode(str.getBytes("UTF-8"));使用1次utf-8byte[]utf8=dcipher.doFinal(dec);//createnewstringbasedonthespecifiedcharsetreturnnewString(utf8);
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

關(guān)于字符編碼,可以參考阮大神的字符編碼筆記:ASCII,Unicode和UTF-8,尤其是里面UTF8的部分。這里需要用到的一個關(guān)鍵信息是:對于ASCII碼為0-127的字符,UTF8編碼和ASCII編碼是相同的(原文說的是對于英語字母,但其實英文字母只是其中一部分)。
現(xiàn)在來說你的代碼
先說String.getBytes(),這個方法沒有指定編碼,會使用系統(tǒng)默認的編碼,對于中文Windows系統(tǒng)來說,就是GBK編碼。
從BASE64DecoderStream.decode(str.getBytes("UTF-8"))這調(diào)用判斷,str里保存的是Base64編碼,由[a-zA-Z0-9+/]這64個字符組成,ASCII范圍都在0-127之間,所以getBytes()和getBytes("utf-8")的區(qū)別就在于GBK和UTF8——而在剛才說的字符范圍內(nèi),這兩個編碼其實沒有區(qū)別,也就是說,這里你使用不使用UTF8,結(jié)果是一樣的。
然后你的代碼,將base64解碼的結(jié)果進行了解密(加密解密都有可能,從邏輯上來判斷,更像是解密)。至于解決的結(jié)果,是byte[]。
OK,到這一步,你得到了byte[]的utf8,這里utf8只是一個變量,通常會提醒讀者其保存的數(shù)據(jù)是UTF8編碼的。順便提一下,計算機世界,所有東西都是二進制保存,而保存的基本單位是字節(jié),所以utf8中保存的是啥,從目前這點程序來看,根本看不出來,只有寫程序的人知道。
所以,不管變量名是否UTF8,你得知道utf8中的數(shù)據(jù)實際什么,只在這個數(shù)據(jù)的確是一段文本,而且使的編碼明確的情況下,按這個編碼生成字符串才能得到正確的結(jié)果。
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關(guān)注
  • 586 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號