c#用HttpWebRequest实现网络信息发送,出现乱码

pzsm123 2011-02-14 12:09:33
现在要用HttpWebRequest处理以下请求,实现手机信息发送。
http://57.45.276.62:8080/Message.sv?method=sendMsg&userCode=test&userPwd=11&numbers=13090809911,13826287334&msgContent=hello&charset=gbk
代码如下:
Encoding myEncoding = Encoding.GetEncoding("UTF-8");
param =
HttpUtility.UrlEncode("method", myEncoding) + "=" + HttpUtility.UrlEncode("sendMsg", myEncoding)
+ "&" + HttpUtility.UrlEncode("userCode", myEncoding) + "=" + HttpUtility.UrlEncode(sUserName, myEncoding)//帐号
+ "&" + HttpUtility.UrlEncode("userPwd", myEncoding) + "=" + HttpUtility.UrlEncode(sPswd, myEncoding)//密码
+ "&" + HttpUtility.UrlEncode("numbers", myEncoding) + "=" + HttpUtility.UrlEncode(sNumbers, myEncoding)//号码
+ "&" + HttpUtility.UrlEncode("msgContent", myEncoding) + "=" + HttpUtility.UrlEncode(sContent, myEncoding)//内容
+ "&" + HttpUtility.UrlEncode("charset", myEncoding) + "=" + HttpUtility.UrlEncode("gbk", myEncoding);

byte[] postBytes = Encoding.UTF8.GetBytes(param);
req = (HttpWebRequest)HttpWebRequest.Create("http://57.45.276.62:8080/Message.sv");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
req.ContentLength = postBytes.Length;

try
{
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(postBytes, 0, postBytes.Length);
reqStream.Close();
}
}
catch (Exception e)
{
}
手机收到后,如果是中文字,则全是(?号)乱码。如果是英文字就正常
...全文
581 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pztx1992 2011-02-17
  • 打赏
  • 举报
回复
编码问题

代码编码与你.net的编码与服务器的编码是否一致,如果一致即可
  • 打赏
  • 举报
回复
哦sorry,我看到了req.GetRequestStream(),看错了。我在上面#8楼的作废。
  • 打赏
  • 举报
回复
还有,你的最初的描述,那些参数不是url参数吗?你怎么在程序中把它写成post的消息体呢?

你的代码跟之前的说明(http://.......)完全对不上号。把url中的参数,给写成post消息体了,这个差别也太大了。
  • 打赏
  • 举报
回复
既然你弄了那么多(实际上许多都是多余的)UrlEncode代码,那么你的param字符串中就根本不存在中文字符。这时候,使用 utf8 还是 gn2312 编码,其GetBytes方法得到的结果都是一样的。可见至少,修改这个编码肯定是没有用的。

我想你应该首先问问网站,你的 UrlEncode 方式它们接受吗?

编写程序,客户端要看服务器端的规范,不要自己瞎猜。
liyan444 2011-02-16
  • 打赏
  • 举报
回复
一般大部分是GB2312或者UTF-8,如果UTF-8不行,就转为GB2312试试
mjp1234airen4385 2011-02-14
  • 打赏
  • 举报
回复
就是编码的问题,你自己找找吧。这个不行就换别的。
daisi 2011-02-14
  • 打赏
  • 举报
回复
Encoding myEncoding = Encoding.GetEncoding("GB2312");
myEncoding.GetBytes(param);
风之影子 2011-02-14
  • 打赏
  • 举报
回复
发送前进行GB2312编码。
孟子E章 2011-02-14
  • 打赏
  • 举报
回复
Encoding myEncoding = Encoding.GetEncoding("GB2312");
myEncoding.GetBytes(param);
不同的网站要求的编码不同

110,534

社区成员

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

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

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