c#发送的http请求到接收端乱码

xuxiangyang 2011-05-17 04:51:51
 string url = "http://http.sms0551.com/tx/?uid=82612&pwd=123456&mobile=" + phone + "&content=" +  body;//body中包含中文
string result = ObtainHtml2(url);

 private static string ObtainHtml2(string url)
{
string strHtml;
try
{
WebClient wc = new WebClient();
Byte[] bHtml = wc.DownloadData(url);
strHtml = System.Text.Encoding.UTF8.GetString(bHtml);
}
catch
{
strHtml = "";
}
return strHtml;
}

这是一个http请求,她能向手机发送一个短信,因为短信中的内容包含有中文,导致手机看到的是乱码,现在服务器端该做何处理。其中我发现HttpUtility.UrlEncode,HttpUtility.UrlDecode,Server.UrlEncode,Server.UrlDecode在控制台应用程序都不能用。问题是能用该怎么用,不能用该采取什么办法
...全文
1428 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuxiangyang 2011-05-18
  • 打赏
  • 举报
回复
问题已解决,结分
hjx398 2011-05-18
  • 打赏
  • 举报
回复

//那个网站的开发文档
static void Main(string[] args)
{
string strContent = "中国短信网测试c#";
//GET 方式
String getReturn = doGetRequest("http://http.c123.com/tx/?uid=9999&pwd=fa246d0262c3925617b0c72bb20eeb1d&mobile=13585519197,13900008888&content=" + strContent);
Console.WriteLine("Get response is: " + getReturn);
StringBuilder sbTemp = new StringBuilder();

//POST
sbTemp.Append("uid=9999&pwd=fa246d0262c3925617b0c72bb20eeb1d&mobile=13585519197,13900008888&content=" + strContent);
byte[] bTemp = System.Text.Encoding.GetEncoding("GBK").GetBytes(sbTemp.ToString());
String postReturn = doPostRequest("http://http.c123.com/tx/", bTemp);
Console.WriteLine("Post response is: " + postReturn);

}

//POST方式发送得结果
private static String doPostRequest(string url, byte[] bData)
{
System.Net.HttpWebRequest hwRequest;
System.Net.HttpWebResponse hwResponse;

string strResult = string.Empty;
try
{
hwRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
hwRequest.Timeout = 5000;
hwRequest.Method = "POST";
hwRequest.ContentType = "application/x-www-form-urlencoded";
hwRequest.ContentLength = bData.Length;

System.IO.Stream smWrite = hwRequest.GetRequestStream();
smWrite.Write(bData, 0, bData.Length);
smWrite.Close();
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
return strResult;
}

//get response
try
{
hwResponse = (HttpWebResponse)hwRequest.GetResponse();
StreamReader srReader = new StreamReader(hwResponse.GetResponseStream(), Encoding.ASCII);
strResult = srReader.ReadToEnd();
srReader.Close();
hwResponse.Close();
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
}

return strResult;
}
//GET方式发送得结果
private static String doGetRequest(string url)
{
HttpWebRequest hwRequest;
HttpWebResponse hwResponse;

string strResult = string.Empty;
try
{
hwRequest = (System.Net.HttpWebRequest)WebRequest.Create(url);
hwRequest.Timeout = 5000;
hwRequest.Method = "GET";
hwRequest.ContentType = "application/x-www-form-urlencoded";
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
return strResult;
}

//get response
try
{
hwResponse = (HttpWebResponse)hwRequest.GetResponse();
StreamReader srReader = new StreamReader(hwResponse.GetResponseStream(), Encoding.ASCII);
strResult = srReader.ReadToEnd();
srReader.Close();
hwResponse.Close();
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
}

return strResult;
}

private static void WriteErrLog(string strErr)
{
Console.WriteLine(strErr);
System.Diagnostics.Trace.WriteLine(strErr);
}
机器人 2011-05-18
  • 打赏
  • 举报
回复
回复一楼:控制台应用程序,System.Web下没有HttpUtility类

。。。就是用 HttpUtility.UrlEncode 和 UrlDecode 啊
控制台程序需要添加 System.Web.dll
鸭梨山大帝 2011-05-18
  • 打赏
  • 举报
回复
这句话在作怪

System.Text.Encoding.UTF8.GetString(bHtml);

xuxiangyang 2011-05-17
  • 打赏
  • 举报
回复
回复一楼:控制台应用程序,System.Web下没有HttpUtility类
回复二楼:我把strHtml = System.Text.Encoding.UTF8.GetString(bHtml)改成gb2312的编码也不行
回复三楼:没成功,倒是把中文转成ASCII码了
hjx398 2011-05-17
  • 打赏
  • 举报
回复

//发送的时候
var body = "我是中文的";
var base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(body));
string url = "http://http.sms0551.com/tx/?uid=82612&pwd=123456&mobile=" + phone + "&content=" + base64 ;//body中包含中文
string result = ObtainHtml2(url);
//接收的时候

private static string ObtainHtml2(string url)
{
string strHtml;
try
{
WebClient wc = new WebClient();
Byte[] bHtml = wc.DownloadData(url);

strHtml = System.Text.Encoding.UTF8.GetString(bHtml);
var body2 = Encoding.UTF8.GetString(Convert.FromBase64String(strHtml));
}

catch
{
strHtml = "";
}
return strHtml;
}

HDNGO 2011-05-17
  • 打赏
  • 举报
回复
gb2312能用哇?
whowhen21 2011-05-17
  • 打赏
  • 举报
回复
添加System.Web的引用,调用HttpUtility.UrlEncode来编码。然后发送,还有要注意和网站编码保持一致!
*****************************************
本内容使用CSDN小秘书回复
每天回帖即可得10分可用分!
*****************************************

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧