2 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
java中編碼:URLEncoder.encode(strUri,"utf-8");
java中解碼碼:URLDecoder.decode(strUri,"utf-8");
java編碼和解碼
流讀取文件,具有轉(zhuǎn)換編碼功能的有:OutputStreamWriter和InputStreamReader,
構(gòu)造器有如:
InputStreamReader(InputStream in, String charsetName)
創(chuàng)建使用指定字符集的 InputStreamReader。
OutputStreamWriter(OutputStream out, String charsetName)
創(chuàng)建使用指定字符集的 OutputStreamWriter。
處理字符串編碼問(wèn)題:
重新對(duì)獲取的字符串進(jìn)行編碼:Byte[] bytes = str.getBytes(String encodeCharsetNam);
重新對(duì)bytes進(jìn)行解碼,創(chuàng)建新的字符串對(duì)象:str = new String(Byte[] bytes,String decodeCharsetName);
一般結(jié)合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);
例如:resultName=new String(username.getBytes("ISO-8859-1"),"UTF-8");
還可以加入判斷:
if(!Charset.forName("gbk").newEncoder().canEncode(str)){str = new Strin(str.getBytes("ISO-8859-1"),"UTF-8");}else{str = new String(str.getBytes("ISO-8859-1"),"gbk");}
處理請(qǐng)求參數(shù)傳遞編碼問(wèn)題:
java中編碼:URLEncoder.encode(strUri,"utf-8");
java中解碼碼:URLDecoder.decode(strUri,"utf-8");
js中編碼:encodeURIComponent(strUri);encodeURI(strUri);escape(str);
js中解碼:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);
URI組件:主機(jī)、端口、路徑、查詢(xún)參數(shù)、片段等。
URI組件分隔符::/?#&[]@,冒號(hào)用于分隔協(xié)議和主機(jī),/用于分隔主機(jī)和 路徑,?用于分隔路徑和查詢(xún)參數(shù),&用于分隔多個(gè)查詢(xún)參數(shù)等。
URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ & = + $ , / ? # [ ] 他們具有特殊作用,例如上面的分隔作用。
URI允許出現(xiàn)的字符:只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個(gè)特殊字符以及所有保留字符,其他字符均需要經(jīng)過(guò)編碼之后才能出現(xiàn)在Url中,比如使用保留字符的原意,而不是特殊作用。
js中編碼:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));
java/jsp中解碼: java.net.URLDecoder.decode(strUri,"UTF-8");
js中編碼兩次的問(wèn)題:如果使用一次編碼,在瀏覽器地址欄里,瀏覽器認(rèn)為%是個(gè)轉(zhuǎn)義字符,瀏覽器會(huì)把%與%之間的編碼值,兩位兩位取出后進(jìn)行解碼。
然后再傳遞給處理頁(yè)面,然后由處理頁(yè)面進(jìn)行再次解碼,這樣前面就缺少了一次編碼過(guò)程,所以前面需要連續(xù)兩次編碼。
補(bǔ)充概念:
js向java/jsp的編碼與解碼:
- 2 回答
- 0 關(guān)注
- 861 瀏覽
添加回答
舉報(bào)