无法使用HttpWebRequest发送UTF-8编码的XmlDocument

本文关键字:UTF-8 编码 XmlDocument 发送 HttpWebRequest | 更新日期: 2023-09-27 18:07:11

当我在c#中发送此xml时-它被发送为非UTF-8格式,即使我在xml文档声明和HttpWebRequest.ContentType中都指定了"UTF-8"。我怎样才能强制它以UTF-8格式发送数据呢?

XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement root = xmlDoc.DocumentElement;
xmlDoc.InsertBefore(xmlDeclaration, root);
XmlElement element1 = xmlDoc.CreateElement(string.Empty, "pacsoft", string.Empty);
xmlDoc.AppendChild(element1);
string destinationUrl = "";
Uri uri = new Uri(destinationUrl);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.ContentType = "text/xml; encoding='utf-8'"; 
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream, System.Text.Encoding.UTF8).ReadToEnd();
return responseStr;
}

无法使用HttpWebRequest发送UTF-8编码的XmlDocument

你必须改变一行:

bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);

bytes = System.Text.Encoding.UTF8.GetBytes(requestXml)

你在ContentType header中设置的内容是为了让服务器知道你想要接受什么样的编码作为响应

找到了:我需要把这一行改成:

 bytes = System.Text.Encoding.UTF8.GetBytes(requestXml);