今天在asp.net下實現一個發簡訊的功能時需要調用現有的一個URL,並從本地取參數添加到URL上,然後請求此URL。
但參數中含有漢字:
public bool SendMMSByHttp(string url)<br /> {<br /> try<br /> {</p><p> HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(UrlEncode(url));<br /> HttpWebResponse res = (HttpWebResponse)req.GetResponse();<br /> }<br /> catch(Exception ex)<br /> {</p><p> }</p><p> return true;<br /> }
代碼中的url參數中含有漢字,在沒有使用UrlEncode()函數時直接請求,使用者得到的是亂碼。
問題的原因和編碼沒有多大關係。問題在於URL的格式:URL中一般使用小於128的ASCII字元,如果含有超過128的則需要在其前面加上%。
所以我們需要對url進行轉換:
protected string UrlEncode(string url)<br /> {<br /> byte[] bs = Encoding.GetEncoding("GB2312").GetBytes(url);<br /> StringBuilder sb = new StringBuilder();<br /> for (int i = 0; i < bs.Length; i++)<br /> {<br /> if (bs[i] < 128)<br /> sb.Append((char)bs[i]);<br /> else<br /> {<br /> sb.Append("%" + bs[i++].ToString("x").PadLeft(2, '0'));<br /> sb.Append("%" + bs[i].ToString("x").PadLeft(2, '0'));<br /> }<br /> }<br /> return sb.ToString();<br /> }
使用此函數之後使用者收到的就是正常的了。