質問

複数の言語をサポートするページがあります(ユーザーはいつでも言語を変更できます)。
初期化文化法のユーザー選択に基づいて、スレッドの文化を更新します。

また、選択した国のコードページに基づいて応答オブジェクトを更新し、使用するエンコーディングのWebNameにそのcharsetを設定します(コードページに基づいて応答オブジェクトを更新しないと、コントロールにバインドされたデータが文字化けされます)。リソースファイルは、コードページに基づいてローカライズされます。

上記の変更を行った後、ページはブラウザに正しく表示されます。

ただし、ユーザーがアジア言語のいずれかでデータを入力すると、テキストはすべて台無しになります。ドロップダウンリストは、実際に無効なコールバックまたはポストバック引数の例外をスローします。

request.contentencodingをチェックすると、まだUTF-8(Web.configで設定)であることがわかりました。

beginrequestイベント中にrequest.contentencodingを変更すると、入力が正しくなります。しかし、ページサイクルの早い段階でユーザーが選択した言語がわかりません。

上記のアプローチはそれを実現するための正しい方法ですか?着信要求のエンコードを動的に設定するにはどうすればよいですか?

役に立ちましたか?

解決

リクエストはクライアントが持っているものです 送信済 君。あなたは彼が送るものを選択することはできません、それはあなたの入力です。ただし、クライアントはおそらく、フォームを含むページに定義されたエンコードでこの入力を送信する必要があります。

ページにcharsetを正しく設定していますか?たとえば送信しないのですか?

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

HTMLヘッダーでは、データが異なるエンコードにありますか?

コメントの後に追加: 正しく理解していれば、UTF-8とは異なるエンコードで出力ページを生成しています(そうする必要がありますか?)。その後、掲載されたフォームデータのデコードに問題があります。最も簡単な方法は、データがUTF-8に投稿されるようにすることです。そのため、HTMLはを定義します accept-charset 属性 form. 。ただし、属性はIEではサポートされていません。つまり、aがあります ハック: :偽物を追加してみてください <input> IEポストをUTF-8として強制するために、「奇妙な」ユニコード文字を含む。

これはあまり良くありません。より簡単なソリューションは、単にUTF-8を常に使用することです。出力ページに異なるエンコーディングを使用する必要がありますか?

または、別のエンコードにデータを出力する必要がある場合、設定の解決策 Request.ContentEncoding Afaiaaは、使用できる唯一の方法です。使用するエンコーディングを決定するために、投稿された隠されたフィールドを追加することをお勧めします(理論的には、HTTPヘッダーを使用できますが、ブラウザが投稿されたデータで送信するとは思いません)。

    public void Application_BeginRequest(object sender, EventArgs args)
    {
        var inputEncoding = Request.Form["hiddenEncoding"];
        if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top