【问题标题】:xml encoding special charactersxml编码特殊字符
【发布时间】:2016-06-10 15:35:37
【问题描述】:

我正在尝试发送 XML 休息消息,它在字段中有特殊字符。当我在解码时发送它时,它正在放置?特殊字符应该在哪里。

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

这是编码和发送请求的代码。

    <stockReceivedRequest>
     <stockReceived>
<distributorCode>GEO</distributorCode>
<dateReceived>2016-06-10T00:00:00</dateReceived>
<timeReceived>2016-06-10T01:01:01</timeReceived>
<courier>ABC</courier>
<poNumber>1122</poNumber>
<stockDetailReceived>
  <stockDetail>
    <productCode>G0-4MK</productCode>
    <altProductCode />
    <productName>Gift set ü</productName>
    <quantity>10</quantity>
  </stockDetail>
</stockDetailReceived>

这是我们尝试发送的 XML,这是正在接收的内容。

    <?xml version="1.0"?>
    <stockReceivedRequest>
<stockReceived>
    <distributorCode>GEO</distributorCode>
    <dateReceived>2016-06-10T00:00:00</dateReceived>
    <timeReceived>2016-06-10T01:01:01</timeReceived>
    <courier>ABC</courier>
    <poNumber>1119</poNumber>
    <stockDetailReceived>
        <stockDetail>
            <productCode>G0-4MK</productCode>
            <altProductCode />
            <productName>Gift set ?</productName>
            <quantity>10</quantity>
        </stockDetail>
    </stockDetailReceived>
</stockReceived>

希望有人能够提供帮助,如果您需要其他任何东西,请提出。

问候

艾丹

【问题讨论】:

  • 您可以为此使用 CData

标签: c# xml wcf rest encoding


【解决方案1】:

您的 XML 中包含非 ASCII 字符,但您使用 ASCII 对其进行编码。任何不属于 ASCII 字符集的字符都将被编码为 ?,这就是您所看到的。

改变这个:

Encoding.ASCII.GetBytes(xmlRequest.InnerXml)

到这里:

Encoding.UTF8.GetBytes(xmlRequest.InnerXml)

或者,更好的是,将XmlDocument 直接保存到流中。这个is UTF-8的默认编码:

xmlRequest.Save(objRequestStream);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2013-06-06
    • 2011-02-21
    • 2011-12-28
    相关资源
    最近更新 更多