15 October 2008

(.NET C#) POSTでWebサーバにデータ送信時の文字コード UTF-8, Shift JIS

.NET C#を用いて、POSTでのWebサーバとのデータ送受信を行う。 WebサーバがUTF-8の場合と、Shift JISの場合のサンプルコード

(1) WebサーバがUTF-8の場合

C#は内部処理をUTF-8で行っているので、特に何も考えなければこの方法を用いるのが簡単。

string strUri = "http://192.168.1.1/test/test.cgi"; string strData = "送信したい文字列"; string resText; // 結果を受信する文字列 try { // ネットワークコネクションの定義 System.Net.WebClient wc = new System.Net.WebClient(); System.Collections.Specialized.NameValueCollection ps = new System.Collections.Specialized.NameValueCollection(); // POSTで送信するデータセットを定義する (この方法ではUTF-8以外は送信できない!) ps.Add("data", strData); ps.Add("dummy", "dummy"); // data文字列に改行コードが付かないようにするためダミーを送信 // データの送信・応答を受信 byte[] resData = wc.UploadValues(strUri, ps); // コネクションの破棄 wc.Dispose(); // 応答バイト列を、文字列に変換して格納 //UTF-8の場合 resText = System.Text.Encoding.UTF8.GetString(resData); // SJISの場合(受信だけなら、この方式で問題ない) // System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); // resText = enc.GetString(resData); } catch { // ネットワークエラー // エラー処理のコードを書く }

(2) WebサーバがShift JISの場合

テキストバッファ enc のエンコード形式指定は、"shift_jis"のほか、"UTF-8"、"euc-jp" なども指定可能。(1)はUTF-8専用の方法だが、こちらの方法はどの文字コードにも対応できる。

string strUri = "http://192.168.1.1/test/test.cgi"; // SJIS用のテキストバッファ (バッファの文字コードはSJIS以外でも指定可能) System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); // 送信するデータ string strData = "送信したい文字列"; // 返信を受信するテキストバッファ (C#はデフォルトでUTF-8) string resText; // POSTするテキストを作成する(SJISで作成) string strPostData = string.Format("data={0}&dummy=dummy", System.Web.HttpUtility.UrlEncode(strData, enc)); // 「VisualStudioのプロジェクトで、System.Web.dll への参照を追加する」こと byte[] resPostBytes = enc.GetBytes(strPostData); try { // ネットワークコネクションの定義 System.Net.WebClient wc = new System.Net.WebClient(); // UTF-8以外はヘッダ情報が必要(URLエンコードして送信するため) wc.Headers.Add("Content-Type","application/x-www-form-urlencoded"); // データの送信・応答を受信 byte[] resData = wc.UploadData(strUri, resPostBytes); // コネクションの破棄 wc.Dispose(); // 応答バイト列を、文字列に変換して格納 resText = enc.GetString(resData); } catch { // ネットワークエラー // エラー処理のコードを書く }

なお、(2)の方法では、コンパイルのためには「System.Web.dll への参照を追加」を行う必要がある。

20081015-cs1.png
ソリューションエクスプローラで、プロジェクトを選択し、コンテキストメニューの「参照の追加」をクリックするか、「プロジェクト」メニューの「参照の追加」を実行する。

20081015-cs2.png
System.Web.dll をクリックして、「選択」ボタンを押して、ダイアログ下の選択フィールドに追加する。