最近遇到一個問題是要透過HttpWebRequest類別採post的方式將原本unicode的資料轉成big5編碼方式送出給遠端的Server,遠端Server會將接收到的欄位值發送簡訊至手機上。因為遠端Server的接收頁面採用Big5的編碼,且字串資料一律接使用Big5來處理。原本以為很簡單的只要將要處理的字串透過編碼轉換的方式轉成Big5後,就可以直接Post出去給遠端Server即可,但是發現遠端Server卻是一直接收到utf-8傳來亂碼,導致發送出來的簡訊都是亂碼。
後來參考保哥文章"
關於個瀏覽器對網頁與文字編碼的處理規則研究整理"一文,以及另外一篇網路文章"
C#, 使用 HttpWebRequest 向網站提交資料",終於把惱人的亂碼問題給解決掉。其實會一直失敗的原因主要是因為透過WebRequest.Create(requestUriString)時,requestUriString必須將字串進行UrlEncode為Big5碼的動作才行。
以下是自己的Post Big5碼資料的Method供參考
02 | /// This method is used to post data to remote host via WebRequest |
05 | private void postFormViaWebRequest(Dictionary<STRING,STRING> inpufFileds, string sendURL) |
07 | Encoding encoding = Encoding.GetEncoding(950); |
08 | string postData = string .Empty; |
09 | foreach (KeyValuePair<STRING,STRING> kvp in inpufFileds) |
11 | postData += "&" + HttpUtility.UrlEncode(kvp.Key, encoding) + "=" + HttpUtility.UrlEncode(kvp.Value, encoding); |
13 | byte [] data = Encoding.ASCII.GetBytes(postData); |
14 | HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(sendURL + "?" ); |
15 | postRequest.Method = "POST" ; |
16 | postRequest.ContentType = "application/x-www-form-urlencoded;charset=big5" ; |
17 | postRequest.ContentLength = data.Length; |
18 | Stream requestStream = postRequest.GetRequestStream(); |
19 | requestStream.Write(data, 0, data.Length); |
20 | requestStream.Close(); |
21 | }</STRING,STRING></STRING,STRING> |
沒有留言:
張貼留言