UTF32 for WebClient.UploadValues?
本文关键字:UploadValues WebClient for UTF32 | 更新日期: 2023-09-27 18:18:11
我正在使用网络客户端在这里的后请求中上传值:
using (var client = new WebClient())
{
client.Encoding = Encoding.UTF32;
var parameters = new NameValueCollection
{
{"facebookID", IngamableCommunicator.FacebookProfileID + ""},
{"name", name},
{"content", File.ReadAllText(mapPath)}
};
client.UploadValues(url, parameters);
}
正如您清楚地看到的,我认为这就是将请求内容编码更改为 UTF32 的方法。我说的对吗?因为显然,它没有按预期工作。
不能将 UploadValues 方法用于非 Ascii 编码,即构建请求的内部方法:
// System.Net.WebClient
private byte[] UploadValuesInternal(NameValueCollection data)
{
if (this.m_headers == null)
{
this.m_headers = new WebHeaderCollection(WebHeaderCollectionType.WebRequest);
}
string text = this.m_headers["Content-Type"];
if (text != null && string.Compare(text, "application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase) != 0)
{
throw new WebException(SR.GetString("net_webclient_ContentType"));
}
this.m_headers["Content-Type"] = "application/x-www-form-urlencoded";
string value = string.Empty;
StringBuilder stringBuilder = new StringBuilder();
string[] allKeys = data.AllKeys;
for (int i = 0; i < allKeys.Length; i++)
{
string text2 = allKeys[i];
stringBuilder.Append(value);
stringBuilder.Append(WebClient.UrlEncode(text2));
stringBuilder.Append("=");
stringBuilder.Append(WebClient.UrlEncode(data[text2]));
value = "&";
}
byte[] bytes = Encoding.ASCII.GetBytes(stringBuilder.ToString());
this.m_ContentLength = (long)bytes.Length;
return bytes;
}
因此,它使用Encoding.ASCII或WebClient.UrlEncode而不设置编码
使用 HttpWebRequest。
WebClient.Encoding
属性备注:
UploadString
和 UploadStringAsync
方法使用此属性在上载字符串之前将指定的字符串转换为 Byte 数组。有关其他信息,请参阅 GetBytes
方法。
使用 DownloadString
或 DownloadStringAsync
方法下载字符串时,WebClient 使用此方法返回的编码将下载的 Byte 数组转换为字符串。有关其他信息,请参阅 GetString
方法。
但是没有关于UploadValues
编码的内容...
只需将服务器端收到的 POST 内容从 URL 格式化为普通字符串
解码:var postValues= WebUtility.UrlDecode(Encoding.UTF8.GetString(post_content));
或个人价值
var value1 = WebUtility.UrlDecode(context.Request.Form[param1]);