2010-04-23 72 views
0

我有一個Java應用程序發送HTTP請求到C#應用程序。 C#應用程序使用HTTPListener來偵聽請求並進行響應。在Java方面,我使用UTF-8對URL進行編碼。c#HTTPListener編碼問題

當我發送一個\字符時,按照預期編碼爲%5C,但在C#端它變成了/字符。請求對象的編碼是Windows-1252,我認爲這可能會導致問題。如何將默認編碼設置爲UTF-8?

目前,我這樣做是爲了編碼轉換:

 foreach (string key in request.QueryString.Keys) 
     { 
      if (key != null) 
      { 
       byte[] sourceBytes =request.ContentEncoding.GetBytes(request.QueryString[key]); 
       string value = Encoding.UTF8.GetString(sourceBytes)); 
      } 
     } 

此處理非ASCII字符,我也送,但不能解決問題斜線。在調試器中檢查request.QueryString [key]顯示/已經存在。

回答

0

編碼每個查詢字符串變量作爲UTF8:

byte[] utf8EncodedQueryBytes = Encoding.UTF8.GetBytes(key); 
0

短: 必須添加charset=utf-8到的內容類型中的響應首部。

header header看起來像這樣。 的Content-Type = 「text/plain的;字符集= UTF-8」

var text = "Hello World - Barkod Çözücü"; 
var buffer = Encoding.UTF8.GetBytes(text); 

ctx.Response.ContentEncoding = Encoding.UTF8;   // this doesnt work?? 
ctx.Response.ContentType = "text/plain; charset=utf-8"; //Fixxxx 

ctx.Response.ContentLength64 = buffer.Length; 
ctx.Response.OutputStream.Write(buffer, 0, buffer.Length); 

長:我的HTTP監聽的

響應頭

//where is utf-8 ??? i need to put it somewhere here...!!! 
Content-Length: 31 
Content-Type: text/plain;  
Server: Microsoft-HTTPAPI/2.0 

我檢查的網頁能夠顯示utf-8字符,如土耳其語üğşİ

來自utf-8網站的響應標頭

content-type: text/html; charset=utf-8 //so we have put it here like this. 
content-length: 20270 
content-encoding: gzip 
...