最近需要與JAVA程序對接口,其中遇到的URL轉碼問題:
Java中URL編碼所用的 URLEncoder.encode 產生的字符是大寫且英文'(',')'是分別轉成'%28'和 '%29'
而C#中的HttpUtility.UrlEncode產生的字符是小寫且英文括號並沒有轉碼,所以兩者生成的字符不一致,導致系統出錯。
下面貼出解決方案:
1、字符大小寫問題:
//對轉碼后的字符進行大寫轉換,不會把參數轉換成大寫(采用) public static string GetUpperEncode(string encodeUrl) { var result = new StringBuilder(); int index = int.MinValue; for (int i = 0; i < encodeUrl.Length; i++) { string character = encodeUrl[i].ToString(); if (character == "%") index = i; if (i - index == 1 || i - index == 2) character = character.ToUpper(); result.Append(character); } return result.ToString(); }
//網上搜的其他方法,通過該方法代替直接調用HttpUtility.UrlEncode private static string UrlEncode(string temp, Encoding encoding) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < temp.Length; i++) { string t = temp[i].ToString(); string k = HttpUtility.UrlEncode(t, encoding); if (t == k) { stringBuilder.Append(t); } else { stringBuilder.Append(k.ToUpper()); } } return stringBuilder.ToString(); }
2、英文括號問題:
//通過替換字符串解決 encodeurl= encodeurl.Replace("(","%28"); encodeurl=encodeurl.Replace(")", "%29");
