Tengo un servlet de Java que recibe datos de un sistema en sentido ascendente a través de una solicitud HTTP GET. Esta solicitud incluye un parámetro llamado "texto". Si el sistema de aguas arriba asigna a este parámetro:servlet request parámetro codificación de caracteres
TEST3 please ignore:
Aparece en los registros del sistema de aguas arriba como:
00 54 00 45 00 53 00 54 00 33 00 20 00 70 00 6c //TEST3 pl
00 65 00 61 00 73 00 65 00 20 00 69 00 67 00 6e //ease ign
00 6f 00 72 00 65 00 3a //ore:
(Los comentarios // no aparecen realmente en los registros)
En mi servlet leí este parámetro con:
String text = request.getParameter("text");
Si puedo imprimir el valor de text
a la consola, aparece como:
T E S T 3 p l e a s e i g n o r e :
Si examino el valor de text
en el depurador, aparece como:
\u000T\u000E\u000S\u000T\u0003\u0000 \u000p\u000l\u000e\u000a\u000s\u000e\u0000
\u000i\u000g\u000n\u000o\u000r\u000e\u000:
lo que parece que hay un problema con la codificación de caracteres. Se supone que el sistema upstream usa UTF-16. Mi suposición es que el servlet está asumiendo UTF-8 y, por lo tanto, está leyendo dos veces el número de caracteres que debería ser. Para el mensaje "TEST3, ignore:" el primer byte de cada carácter es 00
. Esto se interpreta como un espacio cuando el servlet lo lee, lo que explica el espacio que aparece antes de cada carácter cuando el mensaje está registrado por el servlet.
Obviamente, mi objetivo es simplemente obtener el mensaje "TEST3 ignorar:" cuando leí el parámetro de solicitud text
. Creo que podría lograr esto especificando la codificación de caracteres del parámetro de solicitud, pero no sé cómo hacer esto.
parámetros GET tienen que ser codificados en ASCII o URL, no se puede utilizar un conjunto de caracteres especiales en ese país. –
¿Cuál es su contenedor web? ¿Cuál es tu juego de caracteres html? –
[Esto] (http://stackoverflow.com/questions/3278900/httpservletrequest-setcharacterencoding-seems-to-do-nothing) podría ayudar. –