在asmx webrequest期间,特殊字符未正确编码

时间:2018-02-14 07:02:22

标签: .net xml vb.net web-services

以下是获取请求xml

的asmx中的web方法
 <WebMethod>
Public Function SubmitOrder(SubmitOrderRequest As SubmitOrderRequest) As SubmitOrderResponse  Implements IIHybrisOrderImportServiceSoapBinding.SubmitOrder
Dim inputserilize As New XmlSerializer(SubmitOrderRequest.GetType)

    Dim strwriters = New StringWriter
    inputserilize.Serialize(strwriters, SubmitOrderRequest)
    WriteToFile("Input XML: " & strwriters.ToString & vbCrLf)

XML请求如下:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
<ns2:SubmitOrderRequest xmlns:ns2="http://cos.ws.sideup.reply.eu/SubmitOrderRequest">
        <Orders>
        <Order>
            <Action>CREATE</Action>
   <BillingAddress>
    <BillingAddress1>Paulñ Pogbaà</BillingAddress1>

我期望asmx使用BillingAddress1值显示上述XML,如上所示,但我得到的如下所示:

<?xml version="1.0" encoding="iso-8859-1"?>
<SubmitOrderRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Orders>
    <Order>
      <Action>CREATE</Action>
      <BillingAddress>
        <BillingAddress1>Paul?? Pogba??</BillingAddress1>

如何才能正确显示这些特殊字符?

1 个答案:

答案 0 :(得分:1)

如果您发现编码已从UTF-8更改为iso-8859-1

您需要在StringWriter中设置编码,但遗憾的是它并不支持直接设置编码。因此,请继承StringWriter

,创建自己的StringWriter
Public Class MyStringWriter
    Inherits StringWriter

    Public Overrides Property Encoding As Encoding
        Get
            Return Encoding.UTF8
        End Get
    End Property
End Class

然后在您的代码中使用:

Dim inputserilize As New XmlSerializer(SubmitOrderRequest.GetType)

Dim strwriters = New MyStringWriter
inputserilize.Serialize(strwriters, SubmitOrderRequest)
WriteToFile("Input XML: " & strwriters.ToString & vbCrLf)

Dim inputserilize As New XmlSerializer(SubmitOrderRequest.GetType)

Dim strwriters = New StringWriter
inputserilize.Serialize(strwriters, SubmitOrderRequest)
WriteToFile("Input XML: " & strwriters.ToString & vbCrLf)