当前位置: 首页 > 编程笔记 >

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

詹杰
2023-03-14
本文向大家介绍java web请求和响应中出现中文乱码问题的解析,包括了java web请求和响应中出现中文乱码问题的解析的使用技巧和注意事项,需要的朋友参考一下

说明:在计算机中保存的一切文本信息是以一定的编码表(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="男">&nbsp;女<input type="radio" name="gender" value="女"><br>
  
  喜欢的颜色:<br>
  红<input type="checkbox" name="color" value="红">&nbsp;&nbsp; 绿<input type="checkbox" name="color" value="绿">&nbsp;&nbsp;
  蓝<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="提交">&nbsp;
  <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") ;

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

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

 类似资料:
  • 本文向大家介绍SpringMVC post请求中文乱码问题解决,包括了SpringMVC post请求中文乱码问题解决的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringMVC post请求中文乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们在页面难免提交一些中文数据给后台处理,但是发现后台拿到的数据乱码,可以

  • 本文向大家介绍完美解决Get和Post请求中文乱码的问题,包括了完美解决Get和Post请求中文乱码的问题的使用技巧和注意事项,需要的朋友参考一下 对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); 而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上

  • 本文向大家介绍IDEA编写JavaWeb出现乱码问题解决方案,包括了IDEA编写JavaWeb出现乱码问题解决方案的使用技巧和注意事项,需要的朋友参考一下 使用IDEA写JavaWeb项目时,总会出现编码出错等问题,比如下面这样,页面显示出来一大堆乱码,下面跟着我来操作一下,可以成功解决! 首先在IDEA安装目录下有一个:bin的文件夹,打开后找到如下两个东西:分别打开后再后面添加:-Dfile.

  • 本文向大家介绍关于Ajax请求中传输中文乱码问题的解决方案,包括了关于Ajax请求中传输中文乱码问题的解决方案的使用技巧和注意事项,需要的朋友参考一下 今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题。 如下代码: 如上代码 如果只是传“&foderName=”+folderName 的话,汉字就会产生乱码,如果经过encodeURL 转换两次的话,汉字编码会变为类似 “%e6%b5

  • 本文向大家介绍javaWEB中前后台乱码问题的解决方法总结,包括了javaWEB中前后台乱码问题的解决方法总结的使用技巧和注意事项,需要的朋友参考一下 JAVA中几种常见的编码格式及含义: ASCII 码 学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。 ISO-

  • 本文向大家介绍解决JS外部文件中文注释出现乱码问题,包括了解决JS外部文件中文注释出现乱码问题的使用技巧和注意事项,需要的朋友参考一下 问题描述 中文乱码在Java Web开发中经常出现,这是由于不同的部分编码不一样造成的,一般在开发中,我们把所有能设编码的地方,全部设置成UTF-8,但是有时候还是会出现乱码的情况。在开发中,一般把js代码从html中抽出来,放到一个js文件中,js文件中包含中文