1: O formulário envia dados em primeiro plano no modo post:
Quando o navegador envia dados (assumidos como "China") para o servidor, ele deve consultar a tabela de códigos ao transformar os dados em dados binários de 0101 (assumidos como 98 99). página da web, o navegador informará com qual tabela de códigos enviar os dados. Depois que os dados chegam ao servidor, os dados (98 99) devem ser encapsulados na solicitação. Chamar o método getParameter da solicitação no servlet retorna uma string ("China"). convertido em caracteres. Certifique-se de verificar a tabela de código, pois o designer da solicitação é estrangeiro, a consulta padrão é ISO8859-1, que é comumente usada por eles.
Copie o código do código da seguinte forma:
pacote 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;
//Envia o formulário em modo post
classe pública RequestDemo estende HttpServlet {
public void doGet (solicitação HttpServletRequest, resposta HttpServletResponse)
lança ServletException, IOException {
//Problema distorcido chinês de dados de solicitação
request.setCharacterEncoding("UTF-8"); //Controlamos a página da web do cliente para ser UTF-8
String nome de usuário = request.getParameter("nome de usuário");
//A obtenção de dados é normal, você pode verificar diferentes tabelas de códigos ao gerar dados
response.setCharacterEncoding("gb2312");//Notifica o servidor da tabela de códigos a consultar ao enviar dados
response.setContentType("text/html;charset=gb2312");//Notifica o navegador com qual tabela de código abrir
PrintWriter out = resposta.getWriter();
out.write (nome de usuário);
}
public void doPost (solicitação HttpServletRequest, resposta HttpServletResponse)
lança ServletException, IOException {
doGet(solicitação,resposta);
}
2: O formulário envia dados em primeiro plano no modo get:
Os dados enviados no método get ainda são enviados usando a tabela de códigos usada pelo navegador para abri-los. A diferença é que ao enviar dados no modo get, a codificação da configuração da solicitação é inválida. Mesmo que o UTF-8 esteja definido, o ISO8859-1 ainda será verificado. Obtenha (??). Para resolver este problema, você precisa usar (??) para verificar inversamente o ISO8859-1. Após obter (98 99), verifique a tabela de códigos correta.
Copie o código do código da seguinte forma:
pacote 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;
//Envia o formulário através do método get
classe pública RequestDemo estende HttpServlet {
public void doGet (solicitação HttpServletRequest, resposta HttpServletResponse)
lança ServletException, IOException {
//Problema distorcido chinês de dados de solicitação
request.setCharacterEncoding("UTF-8");//Ao enviar dados no modo get, a codificação da configuração da solicitação é inválida. Mesmo que o UTF-8 esteja definido, o ISO8859-1 ainda será verificado.
String nome de usuário = request.getParameter("nome de usuário");
System.out.println(nome de usuário);
fonte de bytes [] = nomedeusuario.getBytes("iso8859-1");
nome de usuário = nova String (fonte,"UTF-8");
System.out.println(nome de usuário);
}
public void doPost (solicitação HttpServletRequest, resposta HttpServletResponse)
lança ServletException, IOException {
doGet(solicitação,resposta);
}
}
Três: Resumo do problema dos caracteres chineses ilegíveis nos dados enviados:
1. Se o método de envio for post, você só precisará definir a codificação do objeto de solicitação se quiser evitar caracteres ilegíveis.
Nota: A forma como os dados do cliente são enviados depende da codificação com a qual a solicitação deve ser definida.
2. Se o método de envio for get, a configuração da codificação do objeto de solicitação é inválida. Se quiser evitar caracteres ilegíveis, você só poderá convertê-lo manualmente.
String data = "???????";//string ilegível
byte source [] = data.getBytes("iso8859-1");//Obtém os dados originais enviados pelo cliente
data = new String (data.getBytes("iso8859-1"),"UTF-8");//resolve caracteres ilegíveis
//Igual a
dados = nova String (fonte,"UTF-8");
3. O código ilegível no método get também pode ser obtido alterando a configuração do servidor. Altere o arquivo server.xml no diretório conf do Tomact.
3.1
Esta abordagem não é recomendada porque altera o servidor e não é flexível.
3.2
Após essa configuração, qualquer codificação definida pelo setCharacterEncoding da solicitação será usada pelo conector. Embora seja mais flexível que a alteração anterior, ainda fará com que nosso aplicativo seja firmemente dependente do servidor e não é recomendado.
Quatro: Por fim, deixe-me mencionar um pequeno detalhe: se o endereço URL for seguido por dados chineses, ele deverá ser codificado em URL. Os parâmetros enviados no formulário incluem dados chineses, e o navegador nos ajudará automaticamente a codificá-los. Porém, se os parâmetros chineses forem trazidos diretamente através do link, o navegador não nos ajudará a codificá-los. o problema dos caracteres chineses ilegíveis através do segundo método acima Às vezes não funciona. Você deve codificá-lo primeiro através de URLEncoding.encode(,"UTF-8").