墨西哥P.D.F.出现在M ?? xico D.F.在回发上

时间:2012-11-16 07:05:02

标签: c# asp.net encoding ascii

我正在从javascript向C#发送文字MéxicoD.F。但我正在 M ?? xico D.F。。 我的C#代码如下。

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包含MéxicoD.F。文本 M ?? xico D.F。。 我怎么解决它。请帮帮我。

2 个答案:

答案 0 :(得分: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));
}

编辑,就像John Skeet提到的那样:您可以根据您的请求使用编码而不是尝试猜测 - 有时甚至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));
}

答案 1 :(得分: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。