1: El formulario envía datos en primer plano en modo de publicación:
Cuando el navegador envía datos (se supone que son "China") al servidor, debe buscar la tabla de códigos al convertir los datos en datos binarios de 0101 (se supone que es 98 99). Qué tabla de códigos utiliza el navegador para abrir el. página web, el navegador determinará con qué tabla de códigos enviar los datos. Una vez que los datos llegan al servidor, los datos (98 99) deben encapsularse en la solicitud. Llamar al método getParameter de la Solicitud en el servlet devuelve una cadena ("China"). convertido en caracteres. Asegúrese de verificar el código. Tabla, dado que el diseñador de la solicitud es extranjero, la consulta predeterminada es ISO8859-1, que es la que utilizan comúnmente. Esta es la fuente de datos de solicitud confusos.
Copie el código de código de la siguiente manera:
paquete com.yyz.request;
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
//Enviar el formulario en modo publicación
La clase pública RequestDemo extiende HttpServlet {
public void doGet (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza ServletException, IOException {
//Problema confuso chino de datos de solicitud
request.setCharacterEncoding("UTF-8");//Controlamos que la página web del cliente sea UTF-8
Cadena nombre de usuario = request.getParameter("nombre de usuario");
// Obtener datos es normal, puedes consultar diferentes tablas de códigos al generar datos
Response.setCharacterEncoding("gb2312");//Notificar al servidor la tabla de códigos para consultar al enviar datos.
Response.setContentType("text/html;charset=gb2312");//Notificar al navegador con qué tabla de códigos abrir
PrintWriter fuera = respuesta.getWriter();
out.write(nombre de usuario);
}
public void doPost (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza ServletException, IOException {
doGet(solicitud,respuesta);
}
2: El formulario envía datos en primer plano en modo de obtención:
Los datos enviados en el método get aún se envían utilizando la tabla de códigos utilizada por el navegador para abrirlos. La diferencia es que al enviar datos en modo de obtención, la codificación de configuración de la solicitud no es válida. Incluso si se configura UTF-8, se seguirá verificando ISO8859-1. Obtenga (??) Para resolver este problema, debe usar (??) para verificar ISO8859-1 de manera inversa. Después de obtener (98 99), verifique la tabla de códigos correcta.
Copie el código de código de la siguiente manera:
paquete com.yyz.request;
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
//Enviar el formulario mediante el método get
La clase pública RequestDemo extiende HttpServlet {
public void doGet (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza ServletException, IOException {
//Problema confuso chino de datos de solicitud
request.setCharacterEncoding("UTF-8");// Al enviar datos en modo de obtención, la codificación de configuración de la solicitud no es válida. Incluso si se configura UTF-8, se seguirá verificando ISO8859-1.
Cadena nombre de usuario = request.getParameter("nombre de usuario");
System.out.println(nombre de usuario);
fuente de bytes [] = nombre de usuario.getBytes("iso8859-1");
nombre de usuario = nueva cadena (fuente, "UTF-8");
System.out.println(nombre de usuario);
}
public void doPost (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza ServletException, IOException {
doGet(solicitud,respuesta);
}
}
Tres: Resumen del problema de los caracteres chinos confusos en los datos enviados:
1. Si el método de envío es publicación, solo necesita configurar la codificación del objeto de solicitud si desea evitar caracteres confusos.
Nota: La forma en que se envían los datos del cliente depende de la codificación en la que se debe configurar la solicitud.
2. Si el método de envío es get, la configuración de la codificación del objeto de solicitud no es válida. Si desea evitar caracteres confusos, solo puede convertirlo manualmente.
Datos de cadena = "???????";//cadena confusa
fuente de bytes [] = data.getBytes("iso8859-1");//Obtener los datos originales enviados por el cliente
data = new String (data.getBytes("iso8859-1"),"UTF-8");//resolver caracteres confusos
//Igual a
datos = nueva cadena (fuente, "UTF-8");
3. El código confuso en el método get también se puede solucionar cambiando la configuración del servidor. Cambie el archivo server.xml en el directorio conf de Tomact.
3.1
Este enfoque no se recomienda ya que cambia el servidor y no es flexible.
3.2
Después de esta configuración, el conector utilizará cualquier codificación establecida por setCharacterEncoding de la solicitud. Aunque es más flexible que el cambio anterior, seguirá haciendo que nuestra aplicación dependa firmemente del servidor y no se recomienda.
Cuarto: Finalmente, permítanme mencionar un pequeño detalle: si la dirección URL va seguida de datos chinos, debe estar codificada en URL. Los parámetros enviados en el formulario incluyen datos chinos y el navegador nos ayudará automáticamente a codificarlos. Sin embargo, si los parámetros chinos se obtienen directamente a través del enlace, el navegador no nos ayudará a codificarlos. El problema de los caracteres chinos confusos mediante el segundo método anterior. A veces no funciona. Primero debes codificarlo mediante URLEncoding.encode(,"UTF-8").