Completamente resolver el problema de los chinos ilegible programa de desarrollo web java

Será varias veces la codificación

En primer lugar, el navegador se llevará a cabo cuando los datos de transmisión una vez el tiempo codificado y luego obtendrán estos parámetros en un recipiente una vez descodificada (por ejemplo Tomcat).

Codificación en el navegador

En primer lugar, en la barra de direcciones del navegador párrafo la siguiente dirección: http: // localhost: 8080 / zhangsan el nombre de sesión =? . Esta vez, ya que las direcciones de solicitud y los parámetros están en línea con el código ASCII, y el argumento no es algunos caracteres especiales, como por ejemplo: ":"? "", "/", Y así sucesivamente. Por lo que el navegador no será demasiado fuerte para lidiar con esta URL.

Gangster pasaje citado: Desde la URL, por lo tanto, con el fin de garantizar la compatibilidad y la interoperabilidad de la información cuando la dirección URL contiene caracteres no ASCII debe ser escapado pasado por la red.

Pero si no son chinos o caracteres especiales cuando el parámetro: http: // localhost :? 8080 / Login name = Joe Smith . En la URL anterior párrafo, el valor del parámetro se convierte en los chinos, esta vez para copiar la dirección URL en la barra clip de la libreta encontrará url a ser como la siguiente: http: // localhost: 8080 / Login name =% E5? BC% E4 A0 %%%% 89 B8 . En donde % E5% BC% A0% E4 % B8% 89 un asiento en codificación UTF-8 . Este es el proceso de navegador chino.

URLEncoder se puede utilizar para clase java prueba:

pública  estática  vacíos principales (args String []) lanza la excepción { 
        Cadena texto1 = URLEncoder.encode ( "张三", "UTF-8" ); 
        System.out.println (Texto1); 
        // 输出:% E5% BC% A0% E4% B8% 89 
 }

 

proceso de adquisición de parámetros contenedor servlet 

Como el ejemplo anterior, el navegador para "John Doe" en el proceso de codificación UTF-8. Obtener servlet en este parámetro, como el uso de: reqeest.getParameter ( "nombre"). Si el recipiente se utiliza por defecto es ISO-8859-1 codificación, equivalente a realizar las siguientes operaciones.

pública  estática  void principales (args String []) lanza la excepción { 
        Cadena texto2 = URLDecoder.decode ( "% E5% BC% A0% E4% B8% 89", "ISO-8859-1" ); 
        System.out.println (texto2); 
        // 输出: Un ¼ 
    }

 

Esta situación aparecían arruinados, ya que el cliente o el navegador con codificación de servicio al final como resultado de codificación diferente Tomcat.

Así es como para resolver el caso.

En otro formato de codificación contenedor servlet

La forma más sencilla es posible cambiar el recipiente Servelt (como Tomcat) que codifica, por lo que siempre y cuando la codificación del navegador con los mismos recipientes de codificación, por lo general no será ilegible.

Tomcat necesidad de modificar el archivo de directorio raíz conf / ser.xml

<Puerto conector = "8080" protocol = "HTTP / 1.1" ConnectionTimeout = "20000" redirectPort = "8443" /> 

改成

 puerto <Connector = "8080" protocol = "HTTP / 1.1" ConnectionTimeout = "20000" redirectPort =" 8443" URIEncoding = "UTF-8" />

 

Antes de tomcat7 y una codificación predeterminada es "ISO-8859-1", en la codificación predeterminada tomcat8 uso son "UTF-8", por lo que si se utiliza tomcat8 +, y el navegador es UTF-8 formato codificado generalmente no necesitan ser modificados.

Veamos, el navegador formato de codificación.

Navegador POST y GET codificados de manera diferente para procesar la solicitud

Si el recipiente no modifica por defecto Web formato de codificación, así como el tratamiento en el servlet ilegible necesario distinguir petición GET y la solicitud POST.

1, solicitud POST

En el ejemplo anterior, mediante una petición GET, que se coloca directamente detrás del parámetro url empalmado usando un "?" Segmentación. solicitud POST será colocado en los parámetros de la petición del cuerpo, dependiendo de Content-Type para codificar datos (por ejemplo, un navegador puede proporcionarse Content-Type: text / html; charset = UTF-8), y luego transmitir los datos del formulario al servidor.

< Meta http-equiv = "Content-Type"   contenido = "text / html; charset = UTF-8" />

 

En este momento si el contenedor utilizando el "ISO-8859-1" o de otro modo de decodificación "UTF-8" no, se producirá la distorsión caso.

Esto se puede usar cuando el método setCharacterEncoding HttpServletRequest () de codificación que se utiliza para especificar una adquisición de parámetro de solicitud POST.

El navegador si "UTF-8" solicitud POST se puede usar en el tiempo Servlet request.setCharacterEncoding ( "UTF-8"); parámetro de codificación utilizado para obtener un tiempo predeterminado (si el recipiente es un defecto ISO-8859 -1).

Nota : Este método debe ser ejecutado para tener efecto antes de obtener parámetros de la petición, si los primeros parámetros de adquisición, a continuación, ejecutar setCharacterEncoding ( "UTF-8") , que seguirá siendo el código de la sección de codificación por defecto basado en contenedor Tomcat.

 

2, peticiones GET

El método setCharacterEncoding arriba () sólo será útil para los parámetros de la petición del cuerpo. Pero el uso de la solicitud GET enviada en el parámetro url es el (proceso ya que la URL es un servidor HTTP, en lugar del contenedor Web, Tomcat incluido en tan sólo un contenedor HTTP), se seguirá utilizando Tomcat codificación predeterminada para convertir.

Este tiempo puede ser manejado usando la cadena de getBytes (). El navegador utiliza UTF-8 el proceso de caracteres, mientras que los contenedores ISO-8859-1 uso web.

Request.getParameter name = cadena ( "nombre" ); 
nombre = nuevos nueva cadena de caracteres (name.getBytes ( "la ISO-8859-1"), "UTF-8".); 
// esto es el valor correcto del nombre

 

 

Si el formato de codificación de navegador seguro, o jQuery JavaScript utilizan generalmente para parámetros de transcodificación no ASCII formato especificado, y luego de vuelta al grupo como parámetro url.

 

El retorno es el mismo. Manejar el formato de codificación con los rendimientos del navegador el formato no resolverá el problema ilegible. . . .

Referencia: Portal 1, "Servlet y JSP notas de estudio"


 

final...

 

Supongo que te gusta

Origin www.cnblogs.com/Eastry/p/12452408.html
Recomendado
Clasificación