javaurl轉碼
① java 中如何在 url 字元串找出中文字進行轉碼
url 中包含 「:、/」 是用來幹嘛的? 路徑?
如果有變數的話,建議還是單獨來轉碼,不要放進url然後把url全部轉碼。
② java web程序路徑url URLEncoder.encode轉碼為什麼用GBK
通常情況下是不需要轉的,但有時候碰到一些get請求,路徑上帶中文件參數的,這就要轉了,這是IE機制的問題,轉一下比較保險
③ 為什麼要對url進行encode
.encodeURL函數主要是來對URI來做轉碼,它默認是採用的UTF-8的編碼.
. UTF-8編碼的格式:一個漢字來三個位元組構成,每一個位元組會轉換成16進制的編碼,同時添加上%號.
假設頁面端輸入的中文是一個逗中地,按照下面步驟進行解碼
1.第一次encodeURI,按照utf-8方式獲取位元組數組變成[-28,-72-83],對位元組碼數組進行遍歷,把每個位元組轉化成對應的16進制數,這樣就變成了[E4,B8,AD],最後變成[%E4,%B8,%AD] 此時已經沒有了多位元組字元,全部是單位元組字元。
2、第二次encodeURI,進行編碼,會把%看成一個轉義字元,並不編碼%以後字元,會把%編碼成%25.把數組最後變成[%25E4,%25B8,%25AD]然後就把處理後的數據[%25E4,%25B8,%25AD]發往伺服器端,
當應用伺服器調用getParameter方法,getParameter方法會去向應用伺服器請求參數
應用伺服器最初獲得的就是發送來的[%25E4,%25B8,%25AD],應用伺服器會對這個數據進行URLdecode操作,應用伺服器進行解碼的這一次,不管是按照UTF-8,還是GBK,還是ISO-8859,,都能得到[%E4,%B8,%AD],因為都會把%25解析成%.並把這個值返回給getParameter方法
3\、再用UTF-8解碼一次,就得到"中"了。
想想看,如果不編碼兩次,當伺服器自動解碼的時候,假如是按照ISO-8859去解碼UTF-8編碼的東西,就是會出現亂碼。
JS:
[sql] view plain
document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;
Java後台:
[sql] view plain
roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");
④ java url中文轉碼問題
你這是從Servlet中取參然後在界面顯示是吧,JSP這個你設置的沒:<%@page pageEncoding="utf-8" contentType="utf-8" %>
以及request,response的設置:
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
⑤ java url中有中文 傳到後台有亂碼 怎麼改 亂碼是
你這個問題真心不好辦,建議你把頁面編碼改為GBK編碼把。像樓上說的這些方法看似行得通,原理就是把utf-8轉為gbk然後再轉回utf-8,但那樣是不能解決問題的,試圖通過String newStr = new String(str.getBytes("gbk","utf-8"));辦不到的,結果是中文字元為奇數會出現最後一個字亂碼。我以前也曾碰到這個情況,最後還是把頁面統一編碼解決。
⑥ URL中的特殊字元
問題場景:
經過Base64轉碼後的字元串常常包含「+」號,拼接為URL(如param1= test+1 )後,服務端獲取到的值是錯誤的(通過reuqest.getParameter("param1")得到 test 1 )。
錯誤原因:
「+」在URL中是特殊字元,特殊字元在URL中不能直接傳遞,使用的話需要使用它們的編碼。
編碼的規則是前面一個百分號%,後面是對應字元的ASCII(16進制)碼值。例如空格的編碼值是"%20"。以下為url的特殊字元和它們的特殊含義以及對應編碼。
1) + URL 中+號表示空格 %2B
2) 空格 URL中的空格可以用+號或者編碼 %20
3) / 分隔目錄和子目錄 %2F
4) ? 分隔實際的 URL 和參數 %3F
5) % 指定特殊字元 %25
6) # 表示書簽 %23
7) & URL 中指定的參數間的分隔符 %26
8) = URL 中指定參數的值 %3D
解決辦法:
a. 修改客戶端,將客戶端帶「+」的參數中的「+」全部替換為?「2B%」,這樣參數傳到伺服器端時就能得到「+」了。
b. 修改伺服器端,將空格替換為「+」,這種方式只適用於參數中有?「+」沒有空格的情況。
備註:
js中使用encodeURIComponent和decodeURIComponent進行特殊字元的編碼和解碼。
java中使用 URLEncoder.encode和URLDecoder.decode進行特殊字元的編碼和解碼。
⑦ java轉碼後局部亂碼問題
問題給你解決了,看代碼
public class Test {
public static void main(String[] args) {
try {
String s = new String("中文測試局部亂碼問題2011中文測試上傳文件名亂碼問題.txt".getBytes(),
"UTF-8");
System.out.println(s);
s = java.net.URLDecoder.decode(s, "utf-8"); //utf8轉gbk
System.out.println(s);
Test convert = new Test();
byte[] fullByte = convert.gbk2utf8(s); //gbk轉utf8
String fullStr = new String(fullByte, "UTF-8");
System.out.println("string from GBK to UTF-8 byte: " + fullStr);
} catch (Exception e) {
e.printStackTrace();
}
}
public byte[] gbk2utf8(String chenese) {
char c[] = chenese.toCharArray();
byte[] fullByte = new byte[3 * c.length];
for (int i = 0; i < c.length; i++) {
int m = (int) c[i];
String word = Integer.toBinaryString(m);
StringBuffer sb = new StringBuffer();
int len = 16 - word.length();
for (int j = 0; j < len; j++) {
sb.append("0");
}
sb.append(word);
sb.insert(0, "1110");
sb.insert(8, "10");
sb.insert(16, "10");
String s1 = sb.substring(0, 8);
String s2 = sb.substring(8, 16);
String s3 = sb.substring(16);
byte b0 = Integer.valueOf(s1, 2).byteValue();
byte b1 = Integer.valueOf(s2, 2).byteValue();
byte b2 = Integer.valueOf(s3, 2).byteValue();
byte[] bf = new byte[3];
bf[0] = b0;
fullByte[i * 3] = bf[0];
bf[1] = b1;
fullByte[i * 3 + 1] = bf[1];
bf[2] = b2;
fullByte[i * 3 + 2] = bf[2];
}
return fullByte;
}
}
結果:
中文測試局部亂碼問題2011中文測試上傳文件名亂碼問題.txt
中文測試局部亂碼問題2011中文測試上傳文件名亂碼問題.txt
string from GBK to UTF-8 byte: 中文測試局部亂碼問題2011中文測試上傳文件名亂碼問題.txt
⑧ JAVA URLDecoder.decode轉碼失敗怎麼解決
編碼:java.net.URLEncoder.encode("測試","UTF-8");解碼:java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");
⑨ http請求特殊字元轉碼
Java 使用URLEncoder.encode和URLDecoder.decode編解碼(utf-8)中文及特殊字元
1、URLEncoder.encode和URLDecoder.decode
URL只能使用英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號,即
只有字母和數字[0-9a-zA-Z]、一些特殊符號$-_.+!*'()[不包括雙引號]、以及某些保留字(空格轉換為+),才可以不經過編碼直接用於URL,如果URL中有漢字,就必須編碼後使用。
URLDecoder類包含一個decode(String s,String enc)靜態方法,它可以將application/x-www-form-urlencoded MIME字元串轉成編碼前的字元串;
URLEncoder類包含一個encode(String s,String enc)靜態方法,它可以將中文字元及特殊字元用轉換成application/x-www-form-urlencoded MIME字元串。
2、使用URLEncoder.encode編碼
publicstaticStringurlEncode(String urlToken){
String encoded =null;
try{//用URLEncoder.encode方法會把空格變成加號(+),encode之後在替換一下
encoded = URLEncoder.encode(urlToken,"UTF-8").replace("+","%20");
}catch(UnsupportedEncodingException e) {
logger.error("URLEncode error {}", e);
}
returnencoded;
}
3、使用URLEncoder.encode解碼
publicstaticStringurlEncode(String urlToken){
String decoded =null;
try{
decoded =URLDecoder.decode(urlToken,"UTF-8");
}catch(UnsupportedEncodingException e) {
logger.error("URLEncode error {}", e);
}
returndecoded;
}
⑩ 用url傳漢字轉碼問題傳中文就報錯該怎轉碼啊
String s ="dfdf東方時代";
s=new String(s.getBytes("urf-8"),"iso-8859-1");
//2
s=java.net.URLEncoder.encode.decode(s,"utf-8");