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 的方法。我说的对吗?因为显然,它没有按预期工作。

UTF32 for WebClient.UploadValues?

不能将 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 属性备注:

UploadStringUploadStringAsync 方法使用此属性在上载字符串之前将指定的字符串转换为 Byte 数组。有关其他信息,请参阅 GetBytes 方法。

使用 DownloadStringDownloadStringAsync 方法下载字符串时,WebClient 使用此方法返回的编码将下载的 Byte 数组转换为字符串。有关其他信息,请参阅 GetString 方法。

但是没有关于UploadValues编码的内容...

只需将服务器端收到的 POST 内容从 URL 格式化为普通字符串

解码:
var postValues= WebUtility.UrlDecode(Encoding.UTF8.GetString(post_content));

或个人价值

var value1 = WebUtility.UrlDecode(context.Request.Form[param1]);