1 回答

TA貢獻1811條經(jīng)驗 獲得超4個贊
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。
處理字符串編碼問題:
重新對獲取的字符串進行編碼:Byte[] bytes = str.getBytes(String encodeCharsetNam);
重新對bytes進行解碼,創(chuàng)建新的字符串對象: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");}
處理請求參數(shù)傳遞編碼問題:
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組件:主機、端口、路徑、查詢參數(shù)、片段等。
URI組件分隔符::/?#&[]@,冒號用于分隔協(xié)議和主機,/用于分隔主機和 路徑,?用于分隔路徑和查詢參數(shù),&用于分隔多個查詢參數(shù)等。
URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ & = + $ , / ? # [ ] 他們具有特殊作用,例如上面的分隔作用。
URI允許出現(xiàn)的字符:只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個特殊字符以及所有保留字符,其他字符均需要經(jīng)過編碼之后才能出現(xiàn)在Url中,比如使用保留字符的原意,而不是特殊作用。
js中編碼:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));
java/jsp中解碼: java.net.URLDecoder.decode(strUri,"UTF-8");
js中編碼兩次的問題:如果使用一次編碼,在瀏覽器地址欄里,瀏覽器認為%是個轉(zhuǎn)義字符,瀏覽器會把%與%之間的編碼值,兩位兩位取出后進行解碼。
然后再傳遞給處理頁面,然后由處理頁面進行再次解碼,這樣前面就缺少了一次編碼過程,所以前面需要連續(xù)兩次編碼。
補充概念:
js向java/jsp的編碼與解碼:
- 1 回答
- 0 關(guān)注
- 819 瀏覽
添加回答
舉報