2012-11-16 63 views
3

我正在發送文字墨西哥D.F.從javascript到C#但我得到M ?? xico D.F.。 我的C#代碼如下。墨西哥D.F.作爲M ?? xico D.F.在發送中

public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) 
{ 
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); 
    string PostbackData = enc.GetString(context.Request.BinaryRead(context.Request.TotalBytes)); 
} 

PostbackData包含墨西哥D.F.文字爲M ?? xico D.F.。 我該如何解決它。請幫幫我。

+6

'é'不是ASCII ... –

回答

4

,則不應使用ASCII,因爲沒有這樣的符號é那裏,所以使用Encoding.UTF8代替:

using System.Text; 

public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) 
{ 
    //System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
    string postbackData = Encoding.UTF8.GetString(context.Request.BinaryRead(context.Request.TotalBytes)); 
} 

編輯,約翰·斯基特提到:您可以使用編碼從您的要求,而不是嘗試猜測它 - 有時甚至UTF-8是不夠的,所以更好的方法是:

using System.Text; 

public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) 
{ 
    //System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
    string postbackData = context.Request.ContentEncoding.GetString(context.Request.BinaryRead(context.Request.TotalBytes)); 
} 
3

您正在使用ASCIIEncoding(並且沒有明顯的原因創建它的新實例 - 更喜歡Encoding的工廠屬性)。 ASCII不包含任何重音字符。

編輯:你應該使用HttpRequest.ContentEncoding屬性來確定從請求的報頭中的編碼,而不是硬編碼:

HttpRequest request = context.Request; 
byte[] binaryData = request.BinaryRead(context.Request.TotalBytes); 
string postbackData = request.ContentEncoding.GetString(binaryData); 

注意,它幾乎從未使用一個好主意代碼正文中的完全限定名稱。改爲添加using指令。還要注意C#中的局部變量通常是camelCased而不是PascalCased。

相關問題