ちょっとはまったので書いておく。
あるサイトに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とかじゃありえないありがた迷惑機能 親切機能だ(笑)
とりあえず無事解決してよかった
あるサイトに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とかじゃありえない
とりあえず無事解決してよかった