Frage

Ich habe eine Seite, die mehrere Sprachen unterstützt (der Benutzer kann die Sprache jederzeit ändern).
Ich aktualisiere die Kultur des Threads basierend auf der Benutzerauswahl in der Initialize -Kulturmethode.

Ich aktualisiere das Antwortobjekt auch basierend auf der Codeseite für das ausgewählte Land und setze sein Zeichensatz auf den Webnamen der verwendeten Codierung (wenn ich das Antwortobjekt nicht basierend auf der Code -Seite aktualisiere, werden die an Steuerelemente gebundenen Daten verstümmelt ). Die Ressourcendateien werden auch basierend auf der Codeseite lokalisiert.

Nach den oben genannten Änderungen wird die Seite im Browser korrekt angezeigt.

Wenn der Benutzer jedoch in einer der asiatischen Sprachen Daten eingibt, wird der Text durcheinander. Die Dropdown -Liste wirft tatsächlich die ungültige Rückruf- oder Postback -Argument -Ausnahme aus.

Bei der Überprüfung der Anfrage.ContentCoding stellte ich fest, dass es noch UTF-8 war (festgelegt in web.config).

Wenn ich die Anfrage ändere. In der Eingabe wird das Eingang korrekt eingeführt. Ich bin mir jedoch nicht sicher, ob der Benutzer so früh im Seitenzyklus eine Sprache ausgewählt hat.

Ist der obige Ansatz der richtige Weg, um ihn zu erledigen? Wie kann ich die Codierung für die eingehende Anfrage dynamisch festlegen?

War es hilfreich?

Lösung

Die Anfrage ist etwas, was ein Kunde hat gesendet Sie. Sie können nicht wählen, was er sendet, es ist Ihre Eingabe. Der Client sollte jedoch wahrscheinlich diese Eingabe in der auf der Seite definierten Kodierung des Formulars senden.

Stellen Sie das Zeichensatz korrekt auf der Seite ein? Sind Sie sicher, dass Sie nicht EG senden

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

Im HTML -Header, während die Daten in einer anderen Codierung enthalten sind?

Nach Kommentaren hinzugefügt: Wenn ich es richtig verstehe, generieren Sie die Ausgangsseite in einer anderen Codierung als UTF-8 (sind Sie sicher, dass Sie das tun müssen?). Danach haben Sie Probleme, die zurückgeschriebenen Formaten zu dekodieren. Der einfachste Weg wäre, sicherzustellen, dass die Daten in UTF-8 zurückgepostet werden. Dafür definiert HTML die accept-charset Attribut auf form. Das Attribut wird jedoch in IE nicht unterstützt. Denn dh gibt es eine hacken: Sie könnten versuchen, eine Fälschung hinzuzufügen <input> enthält einen „seltsamen“ Unicode-Charakter, um den Beitrag als UTF-8 zu erzwingen.

Was ist nicht sehr schön, eine einfachere Lösung wäre einfach, UTF-8 immer zu verwenden-müssen Sie wirklich verschiedene Codierungen für Ihre Ausgabeseite verwenden?

Oder wenn Sie Daten in einer anderen Codierung ausgeben müssen, Ihre Einstellungslösung Request.ContentEncoding Ist AFAIAA der einzige Weg, den Sie verwenden können. Um die verwendete Codierung zu bestimmen, würde ich empfehlen, ein verstecktes Feld hinzuzufügen, das zurückgepostet wird (theoretisch können Sie HTTP -Header verwenden, aber ich glaube nicht, dass Browser sie mit den veröffentlichten Daten senden), um so etwas wie folgt zu verwenden:

    public void Application_BeginRequest(object sender, EventArgs args)
    {
        var inputEncoding = Request.Form["hiddenEncoding"];
        if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top