Red de conocimiento informático - Material del sitio web - ¿Qué debo hacer si los caracteres chinos en el formulario de solicitud aparecen confusos al crear una página JSP?

¿Qué debo hacer si los caracteres chinos en el formulario de solicitud aparecen confusos al crear una página JSP?

Soluciones al problema de los caracteres chinos confusos en páginas web Mysql y JSP Desde que comencé a aprender JSP, el problema de los caracteres chinos confusos ha sido constante y miserable. Antes de comenzar el proyecto esta vez, el primer problema que tenemos que resolver es el problema confuso chino de mysql. Después de varios días de arduo trabajo, finalmente resolvimos con éxito el problema de los caracteres chinos confusos. Aquí hay un primer plano para referencia futura.

Software y entorno: Windows XP (2000), j2sdk1.4.2, Tom*at 5.0.25, mysql 4.1, EMS Mysql Manager 2 (tablas fáciles de crear, versión 2.8.5.1), controlador mysql - *onne*tor-java-3.1.4-beta-bin.jar.

Objetivo: en este entorno, realizar la visualización, lectura e inserción normales de chino en la base de datos.

Nota: el autor solo probó en este entorno. Otros sistemas y versiones diferentes no se han probado.

Nota: conjunto de caracteres unificado (codificación de página JSP, conjunto de caracteres de base de datos MySQL). conectarse a la URL de la base de datos, solicitar configuración, etc.)

A continuación se utiliza GBK como ejemplo para explicar al autor. Si desea utilizar utf-8, simplemente cámbielo a utf-8 en el GBK correspondiente

--------------------- -- ---- Paso 1 Utilice el juego de caracteres GBK para crear bases de datos y tablas--------------------------------- -- --

Utilizo EMS para construir bases de datos y tablas mysql porque es una interfaz gráfica y fácil de operar (al igual que Enterprise Manager en SQL SERVER 2000).

Para crear una base de datos, seleccione *rear base de datos... en el menú EMS. Cree una nueva base de datos, Chara*terSet seleccione gbk_bin (otro gbk_*hinese_* No sé cuál es la diferencia y no puedo encontrarlo cuando busco información. Si lo sabe, dímelo y lo agregaré. aquí). No confunda el ícono con un signo más en la barra de herramientas que se parece a la base de datos con una nueva base de datos. La nueva base de datos registra una base de datos existente.

Cuando cree tablas en el futuro, seleccione el mismo conjunto de caracteres.

Una vez creado, no utilice EMS para insertar datos en él en este momento; de lo contrario, el chino que verá seguirá siendo confuso.

-------------------------- Paso 2 Agregue algunos parámetros después de la URL para conectarse a la base de datos---- --------------------------

Suponiendo que mi nueva base de datos es testdb, entonces la URL para conectarme a la base de datos debería ser:

jdb*:mysql://lo*alhost:3306/testdb?useUni*ode=true&*hara*terEn*coding=gbk

En este momento, tenga en cuenta : Si tuviera que escribir esta URL en código JAVA, la escribiría así. Pero si está en un archivo de configuración xml (como struts-*onfig.xml, web.xml, etc.), debe cambiar & a &; de lo contrario, se producirá un error.

Eso es

jdb*:mysql://lo*alhost:3306/testdb?useUni*ode=true&*hara*terEn*oding=gbk

------ -------------------- Paso 3 Cada página JSP debe declarar el juego de caracteres chinos ------------------ - ---------

Agregue una oración en la parte superior de cada página JSP

<%@ page language="java" *ontentType="text/html ; *harset=GBK " %>

Esto garantiza que los caracteres chinos se muestren correctamente en la página JSP

---------------- - ---------- Paso 4 Agregue una clase de filtro para establecer el juego de caracteres solicitado al pasar parámetros ----------------------- -

Debido a que los caracteres en la red se pasan a la clase de filtro, no se usan en la página JSP. Dado que los caracteres en la red se transmiten con codificación iso-8859-1, debemos restablecer el conjunto de caracteres solicitado para mostrar el chino correctamente. Si usamos una clase de filtro para hacer esto, no tenemos que restablecerla cada vez que obtenemos los parámetros chinos.

Contenido de la clase de filtro:

/*

* ===================== = ================================================

*

*

* Proyecto de código abierto JavaWebStudio

*

* Struts_db v0.1

*

* ======================================== =============================

*/

pa*kage *om .strutsLogin.util;

importar java.io.IOEx*eption;

importar javax.servlet.Filter

importar javax.ServletResponse; >

/**

* Filtro chino

*/

publi* *lass SetChara*terEn* odingFilter implementa el filtro {

//---------------------------------------------- -- -------- Variables instantáneas

/**

* La codificación *hara*ter predeterminada establecida para las solicitudes que pasan este filtro.

*/

prote*ted String en*oding = null

/**

* Somos asociado El objeto de configuración del filtro. Si este valor está vacío, este filtro no está configurado actualmente.

*/

prote*ted FilterConfig filterConfig = null

/**

* *hara*ter especificado por el cliente; ¿Debería ignorarse la codificación?

*/

prote*ted booleano ignorar = verdadero

// --------------- -- -----------------------------------Métodos Publi*

/**

* Desactiva este filtro.

*/

publi* void destroy() {

this.en*oding = null

this.filterConfig = null; ;

}

/**

* Seleccione y establezca (si se especifica) el *hara utilizado para interpretar los parámetros de solicitud para esta solicitud. *ter codificación.

*

* @param request La solicitud de servlet que estamos procesando

* @param result La respuesta de servlet que estamos creando

* @param *hain el filtro con el que estamos tratando *hain

*

* @ex*eption IOEx*eption si se produce un error de entrada/salida

* @ex*eption ServletEx*eption si se produce un error de servlet

*/

publi* void doFilter(solicitud de ServletRequest, respuesta de ServletResponse,

FilterChain *hain)

Genera IOEx*eption, ServletEx*eption {

// Selecciona y configura condicionalmente la codificación *hara*ter que se utilizará

p>

if (ignorar || (request.getChara*terEn*oding() == null)) {

String en*oding = sele*tEn*oding(request); >

p>

if (en*oding ! = null)

request.setChara*terEn*oding(en*oding);

/ / Pasar *ontrol al siguiente filtro

*hain.doFilter(solicitud, respuesta

// Pasar *ontrol al siguiente filtro

<); p>*hain.response);

}

/**

* Pone en uso este filtro.

*

*

* @param filterConfig objeto de configuración del filtro

*/

publi* void init (FilterConfig filterConfig) lanza ServletEx*eption {

this.filterConfig = filterConfig

this.en* oding = filterConfig.getInitParameter()

Valor de cadena = filterConfig.getInitParameter("ignorar");

if (valor == nulo)

this.ignore = true

else if ( value.equalsIgnoreCase("true"))

this.ignore = true;

else if (value.equalsIgnoreCase("yes"))

esto. ignorar = verdadero;

else

this.ignore = false

}

// ------- - --------------------------------------- ------- Métodos protegidos

/**

* Selecciona el

* *hara*teristi*s apropiado para usar según la solicitud actual y/o el

* *hara*teristi*s en los parámetros de inicialización del filtro. Devuelve

* <*ode>null si no se debe establecer la codificación *hara*ter en*oding.

*

* La implementación predeterminada devuelve incondicionalmente los parámetros de inicialización en*oding configurados por este

* valor de filtro .

*

* @param request La solicitud de servlet que estamos procesando

*/

*/

prote*ted String sele*tEn*oding(solicitud ServletRequest) {

return (this.en*oding

}

}

} //EOC

Este código proviene de www!

Luego agregamos algunas configuraciones en web.xml para comenzar. La configuración es la siguiente:

Set Chara. *ter En*oding

javawebstudio.struts_db.SetChara*terEn*odingFilter

<. param-name>en*oding

GBK

<.init-param>

ignorar

verdadero

Establecer codificación de caracteres

a*ción

colocado en la ubicación adecuada en web.xml. ubicación apropiada en xml. Generalmente al final, antes de la etiqueta (si la hay)

Después de los pasos anteriores, la visualización e inserción en chino en JSP y mysql será normal. También es normal en STRUTS.

Sin embargo, si usa la consola de línea de comandos de EMS o mysql para ver los datos en la tabla, encontrará que son normales.

¿Qué diablos está pasando?

No te preocupes, siempre que ejecutemos la siguiente línea de comando, ¡podremos ver chino normal!

SET *hara*ter_set_*lient = gbk;

SET *hara*ter_set_*onne*tion = gbk

SET *hara*ter_set_database = gbk;

SET *hara*ter _set_results = gbk;

SET *hara*ter_set_server = gbk

SET *ollation_*onne*tion = gbk_bin; /p>

SET *ollation_database = gbk_bin;

SET *ollation_server = gbk_bin

Si está utilizando la línea de comando mysql, simplemente escriba.

Si está utilizando EMS, hay un botón Mostrar editor SQL en la barra de herramientas, haga clic en él, escriba el comando anterior, luego presione el botón "exe*ute", ¡y listo!

¡En este caso, incluso puedes usar nombres chinos para crear bases de datos, nombres de tablas y nombres de campos!

------------------------------------------- ----- --------------------------------------------- ----- -------

¡Pero hay una cosa a la que prestar especial atención!

En mysql y JAVA existen diferentes reglas para nombres como GBK, UTF-8, etc., por lo que debes tener cuidado al escribir estos nombres, de lo contrario se producirán errores.

Por ejemplo, GBK debería escribirse como GBK en JAVA, pero en mysql debería escribirse como gbk (la URL que conecta a la base de datos)

Por ejemplo, UTF-8 debería escribirse como UTF- en JAVA 8, pero debería escribirse como utf8 en Mysql

Otros caracteres del conjunto de caracteres tienen diferencias similares