3

我正在将文本México DF 从 javascript 发送到 C#,但我收到M??xico DF。我的 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éxico DF 文本作为M??xico DF。我该如何解决。请帮我。

4

2 回答 2

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 提到的:您可以从您的请求中使用 Encoding 而不是尝试猜测它 - 有时甚至 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));
}
于 2012-11-16T07:11:35.570 回答
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# 中的局部变量通常是驼峰式而不是 PascalCased。

于 2012-11-16T07:11:18.040 回答