A seguir são apresentadas 4 soluções diferentes para caracteres ilegíveis, que basicamente cobrem as diferentes situações em que caracteres ilegíveis aparecem no desenvolvimento web.
A solução de código distorcido é proposta principalmente para o ambiente de desenvolvimento java + mysql, desde que as modificações correspondentes sejam feitas, ela pode ser usada para resolver o problema de código distorcido em diferentes ambientes de linguagem.
1. A página JSP exibe caracteres ilegíveis
A seguinte página de exibição (display.jsp) aparece ilegível:
código do programa
<html>
<cabeça>
<title>Processamento chinês de JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<corpo>
<%
out.print("Processamento JSP chinês");
%>
</body>
</html>
Para diferentes servidores WEB e diferentes versões do JDK, os resultados do processamento são diferentes. Motivo: O método de codificação usado pelo servidor é diferente e o navegador exibe resultados diferentes para caracteres diferentes. Solução: Especifique o método de codificação (gb2312) na página JSP, ou seja, adicione: <%@ page contentType="text/html; charset=gb2312"%> na primeira linha da página para eliminar caracteres ilegíveis. A página completa é a seguinte:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<cabeça>
<title>Processamento chinês de JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<corpo>
<%
out.print("Processamento JSP chinês");
%>
</body>
</html>
2. Caracteres distorcidos aparecem quando o formulário é enviado em chinês Abaixo está uma página de envio (submit.jsp) com o seguinte código:
Código do programa
.
<html>
<cabeça>
<title>Processamento chinês de JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<corpo>
<form name="form1" method="post" action="process.jsp">
<div alinhar="centro">
<input type="text" nome="nome">
<input type="submit" name="Enviar" value="Enviar">
</div>
</form>
</body>
</html>
A seguir está o código da página de processamento (process.jsp):
Código do programa
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<cabeça>
<title>Processamento chinês de JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<corpo>
<%=request.getParameter("nome")%>
</body>
</html>
Se os caracteres ingleses enviados em submit.jsp puderem ser exibidos corretamente, se os caracteres chineses forem enviados, caracteres ilegíveis aparecerão. Motivo: o navegador usa a codificação UTF-8 por padrão para enviar solicitações, e os métodos de codificação UTF-8 e GB2312 representam os caracteres de maneira diferente, portanto, os caracteres não podem ser reconhecidos. Solução: codifique uniformemente a solicitação por meio de request.seCharacterEncoding("gb2312") para obter a exibição normal do chinês. O código process.jsp modificado é o seguinte:
Código do programa
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<cabeça>
<title>Processamento chinês de JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<corpo>
<%=request.getParameter("nome")%>
</body>
</html>
3. A conexão com o banco de dados está distorcida.
Contanto que tudo que envolva chinês esteja ilegível, a solução é adicionar useUnicode=true&characterEncoding=GBK ao URL do banco de dados e tudo ficará bem.
4. A exibição do banco de dados está distorcida
No mysql4.1.0, caracteres chineses distorcidos aparecerão no tipo varchar e no tipo de texto. Para o tipo varchar, defini-lo como um atributo binário pode resolver o problema do tipo de texto, uma classe de conversão de codificação deve ser usada para lidar com isso. A implementação é a seguinte:
Código do programa
.
classe pública Converter {
/** Converte o código ISO-8859-1 para GB2312
*/
String estática pública ISOtoGB(String iso){
String gb;
tentar{
if(iso.equals("") || iso == nulo){
retornar "";
}
outro{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
retornar GB;
}
}
catch(Exceção e){
System.err.print("Erro de conversão de codificação:"+e.getMessage());
retornar "";
}
}
}
Compile-o em uma classe e você pode chamar o método estático ISOtoGB() da classe Convert para converter a codificação.