2009-08-05 23 views
12

En el sitio web que estoy tratando de ayudar con, el usuario puede introducir una URL en el navegador, al igual siguientes caracteres chinos,Manejo de codificación de caracteres en la URI en Tomcat

http://localhost:8080?a=测试 

En el servidor, obtenemos

GET /a=%E6%B5%8B%E8%AF%95 HTTP/1.1 

Como puede ver, está codificado en UTF-8, luego codificado en la URL. Podemos manejar esto correctamente al configurar la codificación en UTF-8 en Tomcat.

Sin embargo, a veces no puedes Latin1 en algunos navegadores,

http://localhost:8080?a=ß 

convierte en

GET /a=%DF HTTP/1.1 

es de todos modos para manejar esto correctamente en Tomcat? Parece que el servidor tiene que hacer algunas conjeturas inteligentes. No esperamos manejar Latin1 correctamente al 100%, pero cualquier cosa es mejor que lo que estamos haciendo ahora suponiendo que todo es UTF-8.

El servidor es Tomcat 5.5. Los navegadores compatibles son IE 6+, Firefox 2+ y Safari en iPhone.

+0

posible duplicado de [Detectar la codificación URI automáticamente en Tomcat] (http://stackoverflow.com/questions/2657515/detect-the-uri-encoding-automatically-in-tomcat) – Ryan

Respuesta

5

Desafortunadamente, la codificación UTF-8 es un "debería" en el URI specification, lo que parece suponer que el servidor de origen generará todas las URL de tal manera que serán significativas para el servidor de destino.

Hay un par de técnicas que consideraría; todo implica analizar usted mismo la cadena de consulta (aunque puede saber mejor que yo si la configuración de la codificación de solicitud afecta la cadena de consulta a la asignación de parámetros o simplemente al cuerpo).

Primero, examine la cadena de consulta para "bytes altos" individuales: una secuencia UTF-8 válida debe tener dos o más bytes (el Wikipedia entry tiene una buena tabla de bytes válidos y no válidos).

Menos fiable sería mirar el encabezado "Aceptar-Caracteres" en la solicitud. No creo que este encabezado sea obligatorio (no he revisado las especificaciones HTTP para verificarlo), y sé que Firefox, al menos, enviará una lista completa de valores aceptables. Elegir el primer valor en la lista podría funcionar, o no.

Finalmente, ¿ha realizado algún análisis en los registros para ver si un usuario-agente en particular usará consistentemente esta codificación?

Cuestiones relacionadas