Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# xml编码特殊字符_C#_Xml_Wcf_Rest_Encoding - Fatal编程技术网

C# xml编码特殊字符

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

我试图发送一个XML rest消息,它的字段中有特殊字符。当我发送它时,当它被解码时,它正在放?在特殊字符应该出现的位置

    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);