3

文字列がサーバーに到達するまでに疑問符になるユニコード文字を入力するテキストエリアがあります。入力で、次のように入力しました。

それについて私を「引用」しないでください。

サーバーでチェックインRequest.Form["fieldID"]したところ、次のPage_Load()ことがわかりました。

「それについて私を「引用」しないでください。

web.config ファイルを確認したところ、<globalization requestEncoding="utf-8" responseEncoding="utf-8" />. UTF-8 が有効になっていることを確認するために他に確認すべきことはありますか?

4

3 に答える 3

0

もう一度、自分の問題を解決します。とても簡単です。簡単な答えは、クライアントに応答を返す前に、次を追加することです。

Response.ContentType = "text/html; charset=utf-8";

長い答えは、キャッシュモードと呼ばれる「機能」が、実際には単なるキャッシュされた応答であるUTF-8エンコードファイルを書き込むことによって、他のすべての応答データを回避したということです。ファイルを書き込む前にその行を追加すると、問題が解決しました。

if (cacheModeEnabled) {
    Response.ContentType = "text/html; charset=utf-8"; // WriteFile doesn't know the file encoding
    Response.WriteFile(Server.MapPath("CacheForm.aspx"), true);
    Response.End();
} else {
  // perform normal response here
}

すべての回答とコメントをありがとう。彼らは間違いなく私がこの問題を解決するのを助けました。特に、Fiddler2を使用すると、リクエストとレスポンスで実際に何が行われているのかを確認できます。

于 2013-01-15T22:10:56.390 に答える
0

のエンコーディングを確認Pageしてformください。accept-charsetform

私はあなたが見ているものを複製することができますISO-8859-1- 例えば

<form action="foo" method="post" accept-charset="ISO-8859-1">
   ....
</form>

VSウォッチウィンドウで


検査Request.Form(キー自体にアクセスする前):

message=Don%ufffdt+%ufffdquote%ufffd+me+on+that.

検査- ASP.Net が既に自動的に urldecodedRequest.Form["message"]を行っていることを意味するコレクション キーにアクセスします。

"Don�t �quote� me on that."

その特定のページで何かが web.config 設定を上書きしているようです ( ? )

ひ...

于 2012-11-28T02:46:28.177 に答える
0

このようなクエスチョン マークは通常、UTF-8 の null が渡されると表示されます。

文字列をHTML エンコードする必要があります。

于 2012-11-28T01:13:24.933 に答える