C#中的System.Web.HttpUtility.UrlEncode轉碼問題


最近需要與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");

 


免責聲明!

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



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