2010年7月アーカイブ

ちょっとはまったので書いておく。

あるサイトにHttpWebRequestでデータをPOSTしようとした。
C#の内部文字コードはUTF-8 送り先はEUC-JP

なので
1.送りたい文字列をEUC-JPに変換
2.1で変換したものをURLエンコード
でいけると思った。

具体的に書くとこんな感じ

//まず文字コードを変換
string data = "日本語の文字列";
byte[] bytes = Encoding.UTF8.GetBytes(data);
string data_euc = Encoding.GetEncoding("EUC-JP").GetString(bytes);
//URLエンコードする
string data_euc_urlencode = HttpUtility.UrlEncode(data_euc));

が 文字化けする

うーんといろいろググった結果 HttpUtility.UrlEncodeの第2引数に文字コードの指定があることが発覚

んじゃあと上のソースの最終行を変更して見るも変わらず。。。
//URLエンコードする
string data_euc_urlencode = HttpUtility.UrlEncode(data_euc,Encoding.GetEncoding("EUC-JP")));


ってかURLEncodeって確か正規表現で1行で書けるような一律置換だから文字コード関係ないはずじゃ・・・
ということで 試しに文字コード変換なしでUrlEncodeの際に文字コードをしてみた。
具体的にはこんな感じ

string data = "日本語の文字列";
//URLエンコードする
string data_euc_urlencode = HttpUtility.UrlEncode(data,Encoding.GetEncoding("EUC-JP")));


めでたく無事解決しました♪
URLエンコードに文字コード変換機能がついてたわけですね。

perlとかじゃありえない ありがた迷惑機能 親切機能だ(笑)

とりあえず無事解決してよかった

2011年9月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30