Domanda

Ho una pagina che supporta più lingue (l'utente può cambiare la lingua in qualsiasi momento).
Aggiorno cultura del thread base alla selezione dell'utente nel metodo Initialize cultura.

Ho anche aggiornare l'oggetto di risposta in base alla tabella codici per il paese selezionato e impostare la sua charset al WebName della codifica utilizzata (se non aggiorno l'oggetto di risposta in base alla tabella codici, quindi i dati destinati a controlli ottiene incomprensibili). i file di risorse sono anche localizzati in base alla tabella codici.

Dopo aver fatto le modifiche di cui sopra, la pagina viene sempre visualizzato correttamente nel browser.

Tuttavia, quando l'utente inserisce i dati in una delle lingue asiatiche, il testo diventa tutto incasinato. L'elenco a discesa getta in realtà l'eccezione di richiamata o argomento postback non valido.

Il controllo del request.contentEncoding ho trovato che era ancora UTF-8 (impostato nel web.config).

Se cambio la request.ContentEncoding durante l'evento BeginRequest, l'ingresso è disponibile in modo corretto. Ma non sono sicuro della lingua dell'utente selezionato questo nelle prime fasi del ciclo di pagina.

È l'approccio di cui sopra il modo corretto di andare su di esso? Come posso impostare dinamicamente la codifica per la richiesta in ingresso?

È stato utile?

Soluzione

La richiesta è qualcosa che un cliente ha inviato voi. Non si può scegliere quello che manda, è il vostro input. Tuttavia, il client dovrebbe probabilmente essere l'invio di questo ingresso nella codifica definita nella pagina contenente il modulo.

si fa a impostare il set di caratteri correttamente sulla pagina? Sei sicuro di non inviare per es.

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

nell'intestazione HTML, mentre i dati sono in una codifica diversa?

Aggiunto dopo commenti: Se ho capito bene, si sta generando la pagina di output in una codifica diversa da UTF-8 (sono sicuro che hai bisogno di farlo?). Dopo di che si hanno problemi di decodifica i dati del modulo postback. Il modo più semplice sarebbe quella di garantire che i dati torna Pubblicato in UTF-8. Per questo, HTML definisce l'attributo accept-charset su form. Tuttavia, l'attributo non è supportato in IE. Per IE, v'è una mod :. si potrebbe provare ad aggiungere un <input> falso contenente “strano” di caratteri Unicode per forzare IE posto come UTF-8

Il che non è molto bello, una soluzione più semplice sarebbe semplicemente quello di utilizzare UTF-8 sempre - non si ha realmente bisogno di usare differenti codifiche per la tua pagina di uscita

In alternativa, se si ha bisogno di dati in uscita in un'altra codifica, la soluzione di impostazione Request.ContentEncoding è AFAIAA l'unico modo è possibile utilizzare. Per determinare la codifica utilizzato, mi sento di raccomandare l'aggiunta di un campo nascosto che viene inviato di nuovo (in teoria, è possibile utilizzare le intestazioni HTTP, ma non credo che i browser li inviano con i dati inviati), ad uso qualcosa di simile:

    public void Application_BeginRequest(object sender, EventArgs args)
    {
        var inputEncoding = Request.Form["hiddenEncoding"];
        if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top