C# xml编码特殊字符
我试图发送一个XML rest消息,它的字段中有特殊字符。当我发送它时,当它被解码时,它正在放?在特殊字符应该出现的位置C# xml编码特殊字符,c#,xml,wcf,rest,encoding,C#,Xml,Wcf,Rest,Encoding,我试图发送一个XML rest消息,它的字段中有特殊字符。当我发送它时,当它被解码时,它正在放?在特殊字符应该出现的位置 ServiceUtil.Log(xmlRequest.OuterXml); TransactionFactory.Response(xmlRequest, ServiceUtil.SERVICE, ExistingReceipt.poNumber); ServiceUtil.Log("Written to transac
ServiceUtil.Log(xmlRequest.OuterXml);
TransactionFactory.Response(xmlRequest, ServiceUtil.SERVICE, ExistingReceipt.poNumber);
ServiceUtil.Log("Written to transaction factory.");
objHttpWebRequest = (HttpWebRequest)WebRequest.Create(BrokerDetails.endpoint);
ServiceUtil.Log(string.Format("Endpoint {0}", BrokerDetails.endpoint));
byte[] bytes = Encoding.ASCII.GetBytes(xmlRequest.InnerXml);
objHttpWebRequest.Method = "POST";
objHttpWebRequest.Headers["Authorization"] = string.Concat("Basic ", Convert.ToBase64String(Encoding.Default.GetBytes(string.Format("{0}:{1}", BrokerDetails.username, BrokerDetails.password))));
ServiceUtil.Log(string.Format("User {0}, password {1}", BrokerDetails.username, BrokerDetails.password));
objHttpWebRequest.ContentLength = (long)((int)bytes.Length);
objHttpWebRequest.ContentType = "application/xml; encoding='utf-8'";
objRequestStream = objHttpWebRequest.GetRequestStream();
objRequestStream.Write(bytes, 0, (int)bytes.Length);
objRequestStream.Close();
XmlDocument xmlDoc = new XmlDocument();
objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
ServiceUtil.Log(string.Format("Got status {0}", objHttpWebResponse.StatusCode.ToString()));
if (objHttpWebResponse.StatusCode == HttpStatusCode.OK)
{
objXMLReader = new XmlTextReader(objHttpWebResponse.GetResponseStream());
xmlDoc.Load(objXMLReader);
if (xmlDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
{
xmlDoc = BaseImpl.StripDeclerations(xmlDoc);
}
xmlDoc.LoadXml(xmlDoc.DocumentElement.OuterXml);
objXMLReader.Close();
TransactionFactory.Response(xmlDoc, ServiceUtil.SERVICE, ExistingReceipt.poNumber);
Response = BaseImpl.BuildResponse<GoodsReceivedResponse> (xmlDoc);
ServiceUtil.Log(string.Format("Response {0}", Response.Result));
Transmited = true;
}
else if (Tries <= 4)
{
Response = null;
Tries += 1;
}
else
{
ErrorMessages.AddAnError(new Error(string.Format(ServiceUtil.NULL_RESPONSE, ExistingReceipt.poNumber)));
Response = new GoodsReceivedResponse(ErrorMessages.ErrorMessages);
Transmited = true;
ServiceUtil.Log("No response");
}
ServiceUtil.Log(xmlRequest.OuterXml);
TransactionFactory.Response(xmlRequest、ServiceUtil.SERVICE、ExistingReceipt.poNumber);
ServiceUtil.Log(“写入事务工厂”);
objHttpWebRequest=(HttpWebRequest)WebRequest.Create(BrokerDetails.endpoint);
ServiceUtil.Log(string.Format(“端点{0}”,BrokerDetails.Endpoint));
byte[]bytes=Encoding.ASCII.GetBytes(xmlRequest.InnerXml);
objHttpWebRequest.Method=“POST”;
objHttpWebRequest.Headers[“Authorization”]=string.Concat(“Basic”,Convert.ToBase64String(Encoding.Default.GetBytes(string.Format(“{0}:{1}”,BrokerDetails.username,BrokerDetails.password));
ServiceUtil.Log(string.Format(“用户{0},密码{1}”,BrokerDetails.username,BrokerDetails.password));
objHttpWebRequest.ContentLength=(长)((int)bytes.Length);
objHttpWebRequest.ContentType=“应用程序/xml;编码='utf-8';
objRequestStream=objHttpWebRequest.GetRequestStream();
objRequestStream.Write(字节,0,(int)字节.长度);
objRequestStream.Close();
XmlDocument xmlDoc=新的XmlDocument();
objHttpWebResponse=(HttpWebResponse)objHttpWebRequest.GetResponse();
Log(string.Format(“获取状态{0}”,objHttpWebResponse.StatusCode.ToString());
if(objHttpWebResponse.StatusCode==HttpStatusCode.OK)
{
objXMLReader=newXMLTextReader(objHttpWebResponse.GetResponseStream());
加载(objXMLReader);
if(xmlDoc.FirstChild.NodeType==XmlNodeType.xmldocation)
{
xmlDoc=基本实施剥离偏差(xmlDoc);
}
LoadXml(xmlDoc.DocumentElement.OuterXml);
objXMLReader.Close();
TransactionFactory.Response(xmlDoc,ServiceUtil.SERVICE,ExistingReceipt.poNumber);
Response=BaseImpl.BuildResponse(xmlDoc);
Log(string.Format(“Response{0}”,Response.Result));
传输=真;
}
else if(try您的XML中有非ASCII字符,但您正在使用ASCII编码。任何不属于ASCII字符集的字符都将被编码为?
,这就是您看到的
更改此项:
Encoding.ASCII.GetBytes(xmlRequest.InnerXml)
为此:
Encoding.UTF8.GetBytes(xmlRequest.InnerXml)
或者,更好的做法是,直接将XmlDocument
保存到流中。默认编码为:
XML中包含非ASCII字符,但您正在使用ASCII对其进行编码。任何不属于ASCII字符集的字符都将被编码为?
,这就是您看到的
更改此项:
Encoding.ASCII.GetBytes(xmlRequest.InnerXml)
为此:
Encoding.UTF8.GetBytes(xmlRequest.InnerXml)
或者,更好的做法是,直接将XmlDocument
保存到流中。默认编码为:
您可以使用CData进行此操作您可以使用CData进行此操作
xmlRequest.Save(objRequestStream);