说明:在计算机中保存的一切文本信息是以一定的编码表(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") ;

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

常见响应状态码:

100-199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200-299:表示成功接收请求并已完成整个处理过程

300-399:为完成请求,客户端需进一步细化请求。例如,请求资源已经移动到一个新地址,常用302/307

400-499:客户端请求有错误,常见404

500-599:服务器端出现错误,常用500

java web中请求和响应中包含中文出现乱码解析的更多相关文章

  1. Java Web之请求和响应

    Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...

  2. 传统Web应用请求和响应特点【显示当前时间】

    (1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...

  3. Node+Express中请求和响应对象

    在用 Express 构建 Web 服务器时,大部分工作都是从请求对象开始,到响应对象终止. url的组成: 协议协议确定如何传输请求.我们主要是处理 http 和 https.其他常见的协议还有 f ...

  4. 转:Java Web 项目发布到Tomcat中三种部署方法

    首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:   ...

  5. JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean

    如果直接使用 @Autoware 获取 bean 会直接使该 bean 为 null,这是因为这种配置过滤器的方法无法在过滤器中使用 Spring bean,因为 Filter 比 bean 先加载, ...

  6. Java Web 项目发布到Tomcat中三种部署方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...

  7. wrk 压测中请求无法响应问题解决过程

    ================= 遇到问题 =================$ 直连压测 wrk -c10000 -t100 -d100m http://localhost:9981/order/ ...

  8. java web获取请求体内容

    Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...

  9. PHP中file_exists()函数不能检测包含中文的文件名的解决办法

    版权声明:本文为博主原创文章,未经博主允许不得转载.          PHP中一般使用file_exists()判断某个文件或者文件夹是否存在,如果文件或文件夹存在则返回true,不存在则返回fal ...

随机推荐

  1. Web.config中加了system.diagnostics节点后就不能访问了

    Web.config中加了system.diagnostics节点后就不能访问了,怎么回事? [解决方法] 不要把system.diagnostics节点作为web.config的第一个节点.

  2. 免费电子书:The Guide to Minimum Viable Products

    本地下载 来自uxPin的免费电子书

  3. Xcode插件,模板安装

    一:是使用工具安装 A Package Manager for Xcode -Xcode模板管理工具Alcatraz使用 二:手动安装 1:打开资源库: 打开Finder---按住alt----前往- ...

  4. android 上线流程

    1.首先打开安卓市场官网,在右上角找到注册按钮,先注册成为开发者. 2.而后点击“开发者”进入“开发者中心”页面(也可从网页下方的“开发者入口”进入). 3.选择“发布软件”选项,依次上传创建的APP ...

  5. 原创Oracle数据泵导出/导入(expdp/impdp)

    //创建目录 create Or Replace directory dpdata1 as 'd:\test\dump'; //赋予读写权限 grant read,write on directory ...

  6. 调用网易有道词典api

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): ...

  7. HDUOJ -----1686

    Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  8. c语言格式大整理

    1.C语言中,非零值为真,真用1表示:零值为假,假用0表示. 2.转义字符参考: \a 蜂鸣,响铃 \b 回退:向后退一格 \f 换页 \n 换行 \r 回车,光标到本行行首 \t 水平制表 \v 垂 ...

  9. Chrome禁用缓存

    Chrome默认对JS和CSS等静态资源进行缓存,对HTML不启用缓存. 在开发阶段,我们想要更改之后马上看到效果,那就必须禁用JS和CSS. 快捷键是F12+F1,F12相当于打开dev-tool, ...

  10. leetcode621 贪心:任务安排

    题目链接 给定26种任务,每种任务的数量已知. 相同任务之间必须间隔n个时间段,为了不足n个时间段,可以让及其休息. 问:最少需要多长时间才能处理完这些任务? 这道题用贪心策略解决:每次安排任务时,优 ...