以下是获取请求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>
如何才能正确显示这些特殊字符?
答案 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)