2009-02-20 142 views
0

我正在開發基於ASP.Net asmx Web服務的Web服務。服務器端將響應byte []給以UTF-8編碼的客戶端,客戶端將byte []轉換爲字符串。Web服務響應編碼問題

我的疑惑是,服務器端的英格蘭磅字符(我在轉發Http響應之前轉儲,而服務器端的字符正確爲英國英鎊)將被接收爲??從客戶端。

任何想法是什麼錯?我懷疑這是編碼問題,但我不知道如何進一步調試和任何設置(客戶端Web服務代理的設置?)會影響?

由於事先 喬治

這裏是頭部分,我從提琴手了。

HTTP/1.1 200 OK 日期:星期五,2009年2月20日十六點51分30秒GMT 服務器:Microsoft-IIS/6.0 緩存控制:無緩存 編譯:無緩存 X-Powered-由:ASP.NET X-ASPNET-版本:2.0.50727 緩存控制:私人 內容類型:文本/ XML 內容長度:22752

XML版本= 「1.0」 編碼=「UTF- 8"

+0

另請參閱:http://stackoverflow.com/questions/10221051/asmx-web-service-using-wrong-encoding-on-incoming-request – fungchou 2012-10-17 10:15:58

回答

1

要做的第一件事就是嗅出實際上發送的是什麼,在條款頭文件,XML聲明和形成文本本身的字節。

Fiddler是一個很好的HTTP代理,或者您可以使用WireShark來嗅探網絡級別。

一旦你得到的信息(Content-Type頭,XML聲明和彌補英鎊符號字節),如果你更新你的答案,我們會看到我們能做些什麼那三位。這聽起來很奇怪,因爲通常ASP.NET正是這樣做的。

你的客戶端代碼是什麼樣的?這只是正常的.NET Web服務客戶端代碼嗎?

編輯:嘗試找到一個二進制(十六進制轉儲)顯示在提琴手,所以你可以找到字節

不過,我強烈懷疑,問題是僅僅滿足於結果轉儲到控制檯。下面是一些代碼使用轉儲Unicode代碼點:

static void DumpString (string value) 
{ 
    foreach (char c in value) 
    { 
     Console.Write ("{0:x4} ", (int)c); 
    } 
    Console.WriteLine(); 
} 

我懷疑你會在輸出中,這是Unicode的井號看到一個00A3。這意味着該字符串實際上已經到達您的客戶端 - 但將其寫入控制檯失敗。

+0

我剛剛使用了Fiddler併發布了響應。任何想法,古魯? :-) – George2 2009-02-20 16:55:00