Question

J'ai une page qui prend en charge plusieurs langues (l'utilisateur peut changer la langue à tout moment).
Mettre à jour la culture du thread en fonction de la sélection de l'utilisateur dans la méthode Culture Initialize.

mettre à jour également l'objet de réponse en fonction de la page de code pour le pays sélectionné et mis son charset au NomSite du codage utilisé (si je ne met pas à jour l'objet de réponse en fonction de la page de code, les données liées à contrôles tronqués obtient). les fichiers de ressources sont également localisées en fonction de la page de code.

Après avoir fait les modifications ci-dessus, la page est correctement s'affiche dans le navigateur.

Cependant, lorsque l'utilisateur entre des données dans l'une des langues asiatiques, le texte est tout foiré. La liste déroulante jette en fait l'exception de rappel non valide ou argument postback.

Lors de la vérification du request.contentEncoding je l'ai trouvé qu'il était encore UTF-8 (défini dans web.config).

Si je change le request.ContentEncoding pendant l'événement BeginRequest, l'entrée est correctement. Mais je ne suis pas sûr de l'utilisateur langue sélectionnée tôt dans le cycle de la page.

L'approche ci-dessus la bonne façon de s'y prendre? Comment puis-je définir dynamiquement le codage pour la requête entrante?

Était-ce utile?

La solution

La demande est quelque chose d'un client ont envoyé . Vous ne pouvez pas choisir ce qu'il envoie, il est de votre entrée. Cependant, le client devrait probablement envoyer cette entrée dans le codage défini sur la page contenant le formulaire.

Est-ce que vous définissez correctement le jeu de caractères sur la page? Etes-vous sûr que vous n'envoyez pas par exemple.

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

dans l'en-tête HTML, alors que les données sont dans un codage différent?

Ajouté après les commentaires: Si je comprends bien, vous générez la page de sortie dans un codage différent que UTF-8 (êtes-vous sûr que vous devez faire cela?). Après quoi vous avez des problèmes de décodage des données de formulaire réaffectés. La façon la plus simple serait d'assurer que les données se réaffectés au en UTF-8. Pour cela, HTML définit le accept-charset attribut sur form. Cependant, l'attribut est pas pris en charge dans IE. Pour IE, il y a un bidouille . vous pouvez essayer d'ajouter un <input> de faux contenant un caractère Unicode « étrange » pour forcer après IE en UTF-8

Ce qui est pas très agréable, une solution plus simple serait tout simplement d'utiliser UTF-8 toujours - avez-vous vraiment besoin d'utiliser différents codages pour votre page de sortie

Ou, si vous avez besoin de données de sortie dans un autre encodage, votre solution de réglage Request.ContentEncoding est AFAIAA la seule façon que vous pouvez utiliser. Pour déterminer l'encodage utilisé, je recommande l'ajout d'un champ caché qui est réaffecté (en théorie, vous pouvez utiliser les en-têtes HTTP, mais je ne pense pas que les navigateurs les envoyer avec les données affichées), d'utiliser quelque chose comme ceci:

    public void Application_BeginRequest(object sender, EventArgs args)
    {
        var inputEncoding = Request.Form["hiddenEncoding"];
        if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top