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が述べたように、編集します。推測するのではなく、リクエストからエンコーディングを使用できます。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ではなくcamelCasedであることに注意してください。

于 2012-11-16T07:11:18.040 に答える