为什么在封装字符串的时候:符号&会变成其它的符号?

liguokun 2012-08-04 10:39:12
在函数Post中,调用封装字符串的函数PostData,正常的结果应该是:

app_key=appkey&method=method&session=session×tamp=2012-08-04%2010%3A43%3A21&format=xml&v=2.0&sign_method=md5

可是变成了下面这个,不知道为什么(红色标注)

app_key=appkey&method=method&session=session×tamp=2012-08-04%2010%3A43%3A21&format=xml&v=2.0&sign_method=md5
public string Post()
{

IDictionary<string, string> param_T = new Dictionary<string, string>();

param_T.Add("app_key", "appkey");
param_T.Add("method", "method");
param_T.Add("session", "session");
param_T.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
param_T.Add("format", "xml");
param_T.Add("v", "2.0");
param_T.Add("sign_method", "md5");

}

protected static string PostData(IDictionary<string, string> parameters)
{
StringBuilder postData = new StringBuilder();
bool hasParam = false;
IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
while (dem.MoveNext())
{
string name = dem.Current.Key;
string value = dem.Current.Value;
// 忽略参数名或参数值为空的参数
if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
{
if (hasParam)
{
postData.Append("&");
}
postData.Append(name);
postData.Append("=");
postData.Append(Uri.EscapeDataString(value));
hasParam = true;
}
}
return postData.ToString();
}
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liguokun 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
编码问题吧,发送的时候编码,读取的时候解码
[/Quote]


我觉得不是编码的问题,如果我单独对param_T.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 进行封装的话,就是正确的,出现timestamp=2012-08-04%2010%3A43%3A21。不知道怎么一起封装的时候就出叉了。
sj490790083 2012-08-04
  • 打赏
  • 举报
回复
编码问题吧,发送的时候编码,读取的时候解码
rayyu1989 2012-08-04
  • 打赏
  • 举报
回复

if (hasParam)
{
postData.Append("&");
}
wushuai1346 2012-08-04
  • 打赏
  • 举报
回复
好像需要转码吧,网络传输里面会把 &** 这种形式进行转码.你查查看是否有需要转码的类.有用过,具体是忘记了,sorry.
liguokun 2012-08-04
  • 打赏
  • 举报
回复
有人能解决吗?

110,538

社区成员

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

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

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