我正在从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。。 我怎么解决它。请帮帮我。
答案 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。