代码之家  ›  专栏  ›  技术社区  ›  Aswin Francis

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

  •  0
  • Aswin Francis  · 技术社区  · 8 年前

    下面是asmx中获取请求xml的webmethod

     <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显示上面的XML,其BillingAddress1值如上所示,但我得到的结果如下所示:

    <?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 回复  |  直到 8 年前
        1
  •  1
  •   Sunil evesnight    8 年前

    如果您注意到编码已从 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)
    
    推荐文章