Pregunta

Tengo una página que soporta múltiples idiomas (el usuario puede cambiar el idioma en cualquier momento).
Actualizo la cultura de la rosca en base a la selección del usuario en el método Initialize Cultura.

También actualizar el objeto de respuesta basada en la página de códigos para el país seleccionado y el conjunto de su juego de caracteres a la NombreWeb de la codificación utilizada (si no actualizo el objeto respuesta basada en la página de códigos, los datos ligados a controles consigue ilegible). los archivos de recursos también se localizan sobre la base de la página de códigos.

Después de hacer los cambios anteriores, la página se está visualice correctamente en el navegador.

Sin embargo, cuando el usuario introduce datos en uno de los idiomas asiáticos, el texto pone todo en mal estado. La lista desplegable en realidad lanza la devolución de llamada o argumento de devolución de datos no válida excepción.

En el registro de la request.contentEncoding i pareció que era todavía UTF-8 (ajustado en web.config).

Si cambio la request.ContentEncoding durante el evento BeginRequest, la entrada viene en correctamente. Pero no estoy seguro de la lengua seleccionada por el usuario tan temprano en el ciclo de la página.

Es el enfoque sobre la forma correcta de hacerlo? ¿Cómo puedo configurar dinámicamente la codificación para la solicitud entrante?

¿Fue útil?

Solución

La solicitud es algo que un cliente tenga enviados . No se puede elegir lo que él envía, es su entrada. Sin embargo, el cliente probablemente debería enviar esta entrada en la codificación definida en la página que contiene el formulario.

Cómo se establece el conjunto de caracteres correctamente en la página? ¿Estás segura de que no envíe por ejemplo.

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

en la cabecera HTML, mientras que los datos están en una codificación diferente?

Alta después de comentarios: Si he entendido bien, se está generando la página de salida en una codificación distinta a UTF-8 (¿está seguro de que tiene que hacer eso?). Después de lo cual usted tiene problemas de descodificación de los datos del formulario enviado de vuelta. La forma más sencilla sería la de asegurar que los datos vuelva Posteado en UTF-8. Por eso, HTML define el atributo accept-charset en form. Sin embargo, el atributo no es compatible con IE. Para IE, hay un truco .: usted podría intentar añadir un <input> falso que contiene cualquier carácter “extraño” Unicode para forzar IE puesto como UTF-8

Lo que no es muy agradable, una solución más simple sería simplemente usar UTF-8 siempre - lo que realmente necesita para utilizar diferentes codificaciones para su página de salida

O, si lo hace necesidad de datos de salida en otra codificación, su solución de Request.ContentEncoding ajuste es AFAIAA la única forma que puede utilizar. Para determinar la codificación utilizada, recomiendo añadir un campo oculto, que se devuelve (en teoría, podría usar las cabeceras HTTP, pero no creo que los navegadores de los envío con los datos enviados), con el uso de algo como esto:

    public void Application_BeginRequest(object sender, EventArgs args)
    {
        var inputEncoding = Request.Form["hiddenEncoding"];
        if (!String.IsNullOrEmpty(inputEncoding)) Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top