Eu desenvolvo com base em Eclipse3.2+j2ee5.0 +tomcat5.09+mysql5.0
Primeiro, os dados distorcidos chineses no formulário POST podem ser resolvidos
em tempo real por meio de filtros. O código dos filtros é o seguinte:
package filtros
import 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
classe pública SetCharacterEncodingFilter implementa Filtro ...{
codificação de string protegida = null;
FilterConfig protegido filterConfig = null;
booleano protegido ignorar = verdadeiro;
public void destroy() ...{
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(solicitação ServletRequest, resposta ServletResponse,
Cadeia FilterChain)
throws IOException, ServletException ...{
// Seleciona e define condicionalmente a codificação de caracteres a ser usada
if (ignorar || (request.getCharacterEncoding() == null)) ...{
Codificação de string = selectEncoding(solicitação);
if (codificação! = null)
request.setCharacterEncoding(codificação);
}
//Passa o controle para o próximo filtro
chain.doFilter(solicitação, resposta }
public
void init(FilterConfig filterConfig) lança ServletException ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("codificação");
Valor da string = filterConfig.getInitParameter("ignorar");
if (valor == nulo)
isto.ignore = verdadeiro;
senão if (value.equalsIgnoreCase("true"))
isto.ignore = verdadeiro;
senão if (value.equalsIgnoreCase("sim"))
isto.ignore = verdadeiro;
outro
this.ignore = false;
}
String protegida selectEncoding(solicitação ServletRequest) ...{
retornar (this.encoding);
}
}
configuração de filtros (configuração web.xml):
<filtro>
<nome do filtro>Definir codificação de caracteres</nome do filtro>
<classe de filtro>filters.SetCharacterEncodingFilter</classe de filtro>
<init-param>
<nome do parâmetro>codificação</nome do parâmetro>
<valor do parâmetro>GBK</valor do parâmetro>
</parâmetro de inicialização>
</filtro>
<mapeamento de filtro>
<nome do filtro>Definir codificação de caracteres</nome do filtro>
<url-padrão>/*</url-padrão>
</mapeamento de filtro>
2. O problema de caracteres ilegíveis ao armazenar dados chineses no banco de dados
é tomado como exemplo no mysql. Basta reescrever a string de conexão:
jdbc:mysql://localhost:3306/workshopdb?
3. Problemas ao passar parâmetros por URL e identificar nomes de arquivos em chinês
Sintomas do problema: 1. Passar parâmetros por URL, por exemplo:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student. Edifício de festa
O valor obtido através de request.getParameter("levleName") é Ranma.
2. Reconheça nomes de arquivos em chinês, por exemplo:
<img src="./pic/Sichuan Map.jpg"> As imagens não podem ser exibidas.
Solução:
1. Se você deseja resolver apenas o primeiro problema, é muito simples. Apenas duas linhas de código:
String role=request.getParameter("chara");
role=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(role);
Porque o servidor Tomcat usa o conjunto de caracteres ISO-8859-1 por padrão. Mas isso só pode resolver o primeiro problema, mas não o problema do nome do arquivo chinês.
2. Resolva os dois problemas juntos. Modifique server.xml, encontre a seguinte instrução e adicione URIEncoding = "GB18030", para que os dois problemas sejam resolvidos juntos ( nenhuma função necessária) =new String(role.getBytes("ISO-8859-1"),"GB2312"); Conversão, os parâmetros obtidos são chineses normais)
<Connector acceptCount="100" connectionTimeout="20000" debug=" 0" desabilitarUploadTimeout="true" enableLookups="false" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="81" redirecionePort="8443"/>
Além disso, muitos artigos apresentam que você pode adicionar URIEncoding="UTF-8", o que pode resolver o problema do nome do arquivo em chinês, mas quando você obtém os parâmetros passados pelo URL por meio de String role=request.getParameter("chara"); , você obtém codificação UTF-8, ele precisa ser convertido para GB2312, o que é problemático.
O texto acima é meu resumo do meu uso. Espero que todos possam fornecer opiniões valiosas.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx