UTF-8編碼字符串我有一個ASP.NET的WebService,看起來是這樣的:接受在ASP.NET的WebService
[WebMethod]
public static void DoSomethingWithStrings(string stringA, string stringB)
{
// and so on
}
的第三方應用程序應調用此WebService。然而,這個應用程序將字符串編碼爲UTF-8,所有的元音變爲'??'。我可以查看呼叫,而特殊字符格式以及:
<?xml version="1.0" encoding="utf-8" ?>
<!-- ... -->
<SoapCall>
<DoSomethingWithStrings>
<stringA>Ä - Ö - Ü</stringA>
<stringB>This is a test</stringB>
</DoSomethingWithStrings>
</SoapCall>
這產生以下輸出,當我僅僅打印該web服務方法內的字符串:
?? - ?? - ??
這是一個測試
我如何配置的WebService接受UTF-8編碼字符串?
更新
菲德勒還告訴我,HTTP請求的內容類型的字符集是UTF-8。
更新2
我嘗試下面的代碼添加到global.asax
調試目的:
public void Application_BeginRequest(object sender, EventArgs e)
{
using (var reader = new System.IO.StreamReader(Request.InputStream))
{
string str = reader.ReadToEnd();
}
}
這讀取實際SOAP調用。 StreamReader
的編碼設置爲UTF-8。 SOAP調用看起來是正確的:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<DoSomethingWithStrings xmlns="http://www.tempuri.org/">
<stringA>Ä - Ö - Ü</stringA>
<stringB>This is a test!</stringB>
</DoSomethingWithStrings>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在web.config
文件全球化設置正確:
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="de-DE" uiCulture="de-DE" />
所以它看起來像是反序列化SOAP消息不使用UTF-8,但ASCII編碼。
只是一個技術點,但加密不是正確的形容詞。由於UTF-8只是一個字符集,編碼會更準確。 – tomasmcguinness
當然你是對的,對不起,混淆:) – Carsten