Http請求時URL中的中文編碼


Http請求時,URL中作為參數值的中文字符等會被編碼

  1、處理編碼思路:

        注意:[在瀏覽器上訪問時,每個空格會被轉碼為 %20 ,URLencode會將每個空格轉碼為 + ]

            URLEncode的轉碼會將一些不需要轉碼的字符也進行轉碼(例如不是參數值的& : /等)

        1.於需要的參數先進行編碼。(如果是get請求可以先使用URLEncode編碼后進行URL的拼接)  

        2.對URL進行截取,然后統一編碼,將特殊字符編碼后替換回來(路徑中的&   /  : 當其作為參數值的時候需要轉碼,否

          則不能被轉碼);此方法弊端:當& 和 /  作為參數值時需要被轉碼,不好處理。

   2、一些常見字符被URLEncode轉碼后的值(中文字符會被轉碼為  以%E開頭,長度為9的字符串)

       英文  編碼后  : %3F
               /  編碼后:%2F
              % 編碼后:%25
      中文 編碼后:%EF%BC%9F
      單個空格   編碼后:+ (在瀏覽器上訪問時,每個空格會被轉碼為 %20 ,URLencode會將

              每個空格轉碼為 +;可以轉碼后將其中的  +  用  %20替換掉 )       

        + 編碼后:%2B
      英文 編碼后:%3A
      中文 : 編碼后:%EF%BC%9A
             & 編碼后:%26

 3、簡單的拼接demo(存在不足之處)

      

      public static void main(String[] args) {
		//被轉碼后的url
		String result = "";
		//需要轉碼的url
		String url = "https://www.baidu.com/s?wd=語 文 ?&rsv_spt=1"
				+ "&rsv_iqid=0xd13fd9040001fb1d&issp=1&f=8&rsv_bp=0"
				+ "&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=2"
				+ "&rsv_sug1=2&rsv_sug7=101&rsv_sug2=0&inputT=774&rsv_sug4=1367  &AAAA=1";
		int index = url.indexOf("?");
		result = url.substring(0,index+1);
		String temp = url.substring(index+1);
		try {
			//URLEncode轉碼會將& : / = 等一些特殊字符轉碼,(但是這個字符  只有在作為參數值  時需要轉碼;例如url中的&具有參數連接的作用,此時就不能被轉碼)
			String encode = URLEncoder.encode(temp, "utf-8");
			System.out.println(encode);
			encode = encode.replace("%3D",  "=");
			encode = encode.replace("%2F", "/");
			encode = encode.replace("+", "%20");
			encode = encode.replace("%26", "&");
			result += encode;
			System.out.println("轉碼后的url:"+result);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}

  編碼前地址:http://hi.baidu.com/test/?a=張三&b=_a123&c=+abc

  編碼后地址:http://hi.baidu.com/test/?a=%E5%BC%A0%E4%B8%89&b=_a123&c=+abc  (中文字符已被轉碼)

  字符對應的值:

    /  →  47  a-z →  97~122  A-Z  →  65~90  :  →  58  %  → 37 

  中文字符對應的值是大於255的 

  char c = '我';

  System.out.println((int)c)   / /可以查看對應的數值 

 
在字符編碼方面,ASCII碼為標准符號、數字、英文等進行了保留,取值范圍是0~127,還有一部分作為擴展ASCII碼128~255

當操作系統采用非ASCII編碼時(比如漢字編碼),一般用擴展ASCII碼來進行,約定用128~255范圍的編碼連續2~3甚至4個來進

行漢字編碼,(比如國標用連續兩個128~255的編碼表示1個漢字,分別是區碼和位碼的編碼;UTF-8可以用3個連續的數來表示一

個漢字),具體編碼規則要看具體定義,一般不相同的。因此,在處理字符串時,如果是有符號字符串,遇到小於0的字符,會結合

后面緊跟的字符來組成一個漢字,大於0的為標准西文字符;如果是無符號的,則可以判斷是否大於127。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM