5

Esto es la continuación de esta pregunta: Java Jersey: Receive form parameter as byte array¿Cómo hacer que IE ingrese los datos de FORMULARIO en UTF-8?

Necesito que los datos del formulario se publiquen en UTF-8 incluso si contienen una página que use el juego de caracteres ISO-8859-1. Encontré una solución para FF, pero no para IE. Aquí está toda la historia:

Uso el servicio web Jersey REST para recibir datos publicados desde el simple html <FORM>. Cuando la página utiliza el juego de caracteres UTF-8, los datos publicados también se codifican con UTF-8 y todo funciona bien. Pero cuando la página usa el juego de caracteres ISO-8859-1, los datos FORM también se publican utilizando ISO-8859-1 y Jersey tiene problemas con los caracteres especiales (probablemente porque espera que los datos se envíen en UTF-8).

método Jersey se ve así:

@Path("/someMethod") 
@POST 
@Produces(MediaType.TEXT_HTML) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public String someMethod(@FormParam("someParam") String someParam) 
{ 
    ... 
} 

Por supuesto, si cambio de toda la página de codificación UTF-8, todo funciona bien, el problema es que agrego forma dinámica a las páginas existentes que pueden utilizar diferentes codificación (en otros trabajos no puedo alterar la codificación de la página).

Tengo una solución que funciona para FF pero no para IE. Si agrego el atributo accept-charset="utf-8" al FORMULARIO que publica los datos, FF codifica correctamente todos los datos publicados usando utf-8 independientemente de que contenga codificación de página, pero esto no funciona en IE.

¿Alguna idea? ¡Gracias!

+0

No podría hacer daño mencionar que esto es una continuación de esta pregunta: http://stackoverflow.com/questions/6282626/java-jersey-receive-form-parameter-as-byte-array – MatrixFrog

+0

En realidad, es posible que desee para volver a etiquetar esto con etiquetas como html, cross-browser e IE. El hecho de que estés usando JAX-RS/Jersey realmente no importa en este momento. Lo que importa es que su servidor espera UTF-8 pero IE le está dando ISO-8859-1. Entonces, en este punto, es un problema del navegador, como yo lo veo. – MatrixFrog

+0

Gracias, tienes razón. Editado! –

Respuesta

3

Ruby on Rails aplicaciones utilizan este truco: se suman en un campo oculto un carácter UTF-8 que no puede ser obligada a ISO Latin 1.

El campo que utilizan es

<input name="utf8" type="hidden" value="&#x2713;" /> 

y termina en los parámetros de la consulta nota

search?param1=foo&param2=bar&utf8=✓ 

Historia: antes de utf8=✓, Ruby on Rails utiliza un muñeco de nieve de fantasía para obligar a UTF-8: http://intertwingly.net/blog/2010/07/29/Rails-and-Snowmen .

Cuestiones relacionadas