Desarrollo en base a eclipse3.2+j2ee5.0 +tomcat5.09+mysql5.0.
Primero, los datos chinos confusos en el formulario POST se pueden filtrar
en tiempo real a través de filtros. El código de filtros es el siguiente:
filtros de paquete;
importar java.io.IOException;
importar javax.servlet.Filter;
importar javax.servlet.FilterChain;
importar javax.servlet.FilterConfig;
importar javax.servlet.ServletException;
importar javax.servlet.ServletRequest;
importar javax.servlet.ServletResponse;
importar javax.servlet.UnavailableException
clase pública SetCharacterEncodingFilter implementa Filtro...{
codificación de cadena protegida = nulo;
FilterConfig protegido filterConfig = nulo;
protegido booleano ignorar = verdadero;
público vacío destruir() ...{
this.codificación = nulo;
this.filterConfig = nulo;
}
public void doFilter (solicitud ServletRequest, respuesta ServletResponse,
cadena FilterChain)
throws IOException, ServletException ...{
// Selecciona y establece condicionalmente la codificación de caracteres que se utilizará
si (ignorar || (request.getCharacterEncoding() == nulo)) ...{
Codificación de cadena = selectEncoding(solicitud);
si (codificación! = nulo)
request.setCharacterEncoding(codificación);
}
// Pasa el control al siguiente filtro
chain.doFilter(solicitud, respuesta);
}
public void init(FilterConfig filterConfig) lanza ServletException ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("codificación");
Valor de cadena = filterConfig.getInitParameter("ignorar");
si (valor == nulo)
this.ignore = verdadero;
de lo contrario si (valor.equalsIgnoreCase ("verdadero"))
this.ignore = verdadero;
de lo contrario si (valor.equalsIgnoreCase("sí"))
this.ignore = verdadero;
demás
this.ignore = false
}
cadena protegida selectEncoding (solicitud ServletRequest) ...{
retorno (esta.codificación);
}
}
configuración de filtros (configuración web.xml):
<filtro>
<nombre-filtro>Establecer codificación de caracteres</nombre-filtro>
<clase-filtro>filters.SetCharacterEncodingFilter</clase-filtro>
<parámetro-init>
<nombre-parámetro>codificación</nombre-parámetro>
<valor-param>GBK</valor-param>
</init-param>
</filtro>
<mapeo de filtros>
<nombre-filtro>Establecer codificación de caracteres</nombre-filtro>
<patrón-url>/*</patrón-url>
</mapeo-de-filtros>
2. El problema de los caracteres confusos al almacenar datos chinos en la base de datos
se toma como ejemplo en mysql. Simplemente reescriba la cadena de conexión:
jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK.
3. Problemas al pasar parámetros a través de URL e identificar nombres de archivos chinos
. Síntomas del problema: 1. Pasar parámetros a través de URL, por ejemplo:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student. edificio del partido
El valor obtenido a través de request.getParameter("levleName") es Ranma.
2. Reconozca nombres de archivos chinos, por ejemplo:
<img src="./pic/Sichuan Map.jpg"> Las imágenes no se pueden mostrar.
Solución:
1. Si solo desea resolver el primer problema, es muy simple. Solo dos líneas de código:
String role=request.getParameter("chara");
rol=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(rol);
Porque el servidor Tomcat utiliza el juego de caracteres ISO-8859-1 de forma predeterminada. Pero esto solo puede resolver el primer problema, pero no el problema del nombre de archivo chino.
2. Resuelva los dos problemas juntos. Modifique server.xml, busque la siguiente declaración y agregue URIEncoding="GB18030", para que los dos problemas se resuelvan juntos ( no se requiere rol) =new String(role.getBytes("ISO-8859-1"),"GB2312" Conversión, los parámetros obtenidos son chinos normales)
<Connector AcceptCount="100" ConnectionTimeout="20000" debug=" 0" enableUploadTimeout="true" enableLookups="false" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" puerto="81" redirigirPort="8443"/>
Además, muchos artículos presentan que puede agregar URIEncoding="UTF-8", lo que puede resolver el problema del nombre de archivo chino, pero cuando obtiene los parámetros pasados por la URL a través de String role=request.getParameter("chara"); , obtienes codificación UTF-8, es necesario convertirlo a GB2312, lo cual es problemático.
Lo anterior es mi resumen de mi uso. Espero que todos puedan brindar opiniones valiosas.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx