java web请求和响应中出现中文乱码问题的解析_java

说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码。而字符编码有多种不同的编码表,所以,如果编码格式和解码格式不是同一个码表就会出现乱码。想要避免出现乱码,需要使保存和读取时使用相同的码表。

在java web编程中经常会出现乱码,现在详细讲解一下如何进行设置,避免乱码

1 网页编码

  在编写网页的时候,需要指定网页的编码格式,使用<meta http-equiv="content-type" content="text/html; charset=UTF-8">来指定。此时浏览器读取或者发送请求的时候会以指定的编码格式保存或发送数据。在此是以utf-8形式。

  例如代码片段:

  <form action="/Pro1/bb" method="post">
  用户名:
  <input type="text" name="username" ><br>

  性别:
  男<input type="radio" name="gender" value="男"> 女<input type="radio" name="gender" value="女"><br>

  喜欢的颜色:<br>
  红<input type="checkbox" name="color" value="红">   绿<input type="checkbox" name="color" value="绿">  
  蓝<input type="checkbox" name="color" value="蓝"> 

  <br>来自的国家
  <select name="country">
   <option value="中国">中国</option>
   <option value="美国">美国</option>
   <option value="日本">日本</option>
  </select>

  <br>
  <input type="submit" value="提交"> 
  <input type="reset" value="重置">

 </form>

2 后端读取请求数据

  在java web的servlet中要想获取请求的数据,需要将发送过来的二进制数据按照相应的码表进行解码才可以获取相应的人类可以读懂字符串。这个例子中是使用post方法,所以在处理post请求中,在获取有中文的请求参数前需要先设置编码格式,不然会出现乱码。因为服务器默认使用iso-8859-1编码表进行解码。

  当然,如果想要在输出中输出中文字符,也需要使用统一的字符编码,此处是utf-8,代码如下

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  String username = request.getParameter("username");
  String gender = request.getParameter("gender");
  String[] colors = request.getParameterValues("color");
  String country = request.getParameter("country");

  out.println("<!DOCTYPE HTML>");
  out.println("<HTML>");
  out.println(" <HEAD><TITLE>测试servlet</TITLE></HEAD>");
  out.println(" <BODY>");
  out.print("<h1>以下是您的输入</h1>");

  out.print("<p>");
  out.print("您的用户名:"+username+"<br>");
  out.print("您的性别:"+gender+"<br>");
  out.print("您喜欢的颜色:");
  for(String cr:colors){
   out.print(cr+" ");
  }
  out.print("<br>");

  out.print("您的国家:"+country+"<br>");

  out.print("</p>");

  out.println(" </BODY>");
  out.println("</HTML>");
 }

注意:此处的request.setCharacterEncoding("utf-8");只对请求实体的内容有效。post请求参数是存放在请求实体中,get方法的请求参数是放在url的后面以问号开始,‘&'连接多个参数。所以想要获取get方法的参数,需要使用手动解码,或者使用filter。

  手动解码方法,为了简单起见只对性别进行解码,实际使用中需要对每一个参数进行解码:String gender = new String(req.getParameter("gender").getBytes("iso-8859-1"),"utf-8") ;

到此时就可以完美解决网页和服务器端出现汉字乱码的现象,记住一条,出现乱码的都是因为编码和解码使用不同编码表的原因,要使用相同的编码表,即可解决问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, web
中文乱码
jsp响应web请求、get请求中文参数乱码、get请求中文乱码、java get请求中文乱码、jmeter响应数据乱码,以便于您获取更多的相关知识。

时间: 2024-11-20 15:03:49

java web请求和响应中出现中文乱码问题的解析_java的相关文章

Java Web请求与响应实例详解_java

Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletResponse.其中HttpServletRequest封装HTTP请求消息,HttpServletResponse封装HTTP响应消息.需要注意的是,Web服务器运行过程中,每个Servlet都会只创建一个实例对象,不过每次请求都会调用Servlet实例的service(ServletRequest

关于Ajax请求中传输中文乱码问题的解决方案_AJAX相关

今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custId) { $.ajax({ type: "Post", contentType: "application/x-www-form-urlencoded; charset=utf-8", url: "http://localhost/CRM/Ashx/HandK

关于Ajax请求中传输中文乱码问题的解决方案

今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custId) { $.ajax({ type: "Post", contentType: "application/x-www-form-urlencoded; charset=utf-8", url: "http://localhost/CRM/Ashx/HandK

JAVA WEB开发从数据库中查询到的数据用list怎么在JSP页面整齐的显示出来,请写代码,谢谢

问题描述 JAVA WEB开发从数据库中查询到的数据用list怎么在JSP页面整齐的显示出来,请写代码,谢谢 JAVA WEB开发从数据库中查询到的数据用list怎么在JSP页面整齐的显示出来,请写代码,谢谢 解决方案 标准标签 页面头部引入<@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" /> <c:forEach items="${list}" var=

java web项目在tomcat中运行时报错,tomcat正常运行

问题描述 java web项目在tomcat中运行时报错,tomcat正常运行 严重: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener java.lang.AbstractMethodError: org.apache.crimson.tree.ElementNode2.getTextContent()Ljava/lan

Java中解决中文乱码问题的方法

Java中解决中文乱码问题的方法 public  String   chStr(String string){   if(string==null){      string="";   }else{      try{         string=(new String(string.getBytes("iso-8859-1"),"GB3212")).trim();      }catch(Exception e){         e.pr

jquery.ajax的url中传递中文乱码问题的解决方法

 本篇文章主要是对jquery.ajax的url中传递中文乱码问题的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JQuery   JQuery默认的contentType:application/x-www-form-urlencoded    这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1    ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符.   JQuery的Ajax根本没有考

jsp 中 ActionForm中文乱码问题解决方法

  jsp教程 中 actionform中文乱码问题解决方法 先我们来了解一下actionform actionform概念 actionform用于封装用户的请求参数,而请求参数是通过jsp页面的表单域传递过来的.因此应 保证actionform的参数,与表单域的名字相同. 编辑本段actionform配置 所有的actionform都被配置在struts-config.xm l文件中,该文件包括了一个form-beans的元素, 该元素内定义了所有actionform,每个actionfor

Netty中uri中文乱码,前端的uri,通过netty解析,中文是乱码

问题描述 Netty中uri中文乱码,前端的uri,通过netty解析,中文是乱码 前端发送一个uri请求,后端Netty解析后到一个FullHttpRequest对象中,通过该对象的getUri() 拿到uri,但里面的中文是乱码,应该怎么解决? 解决方案 http://bbs.csdn.net/topics/390290508