how2j.cn

示例 1 : 获取中文的参数   
示例 2 : 返回中文的响应   

示例 1 :

获取中文的参数

为了成功获取中文参数,需要做如下操作
1. login.html中加上

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

这句话的目的是告诉浏览器,等下发消息给服务器的时候,使用UTF-8编码

2. login.html
form的method修改为post

3. 在servlet进行解码和编码

byte[] bytes= name.getBytes("ISO-8859-1");
name = new String(bytes,"UTF-8");

先根据ISO-8859-1解码,然后用UTF-8编码
这样就可以得到正确的中文参数了

这样需要对每一个提交的数据都进行编码和解码处理,如果觉得麻烦,也可以使用一句话代替:

request.setCharacterEncoding("UTF-8");

并且把这句话放在request.getParameter()之前

以上是使用UTF-8的方式获取中文呢。 也可以使用GBK。把所有的UTF-8替换为GBK即可。 GB2312同理。
获取中文的参数
<!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <form action="login" method="post"> 账号 : <input type="text" name="name"> <br> 密码: <input type="password" name="password"> <br> <input type="submit" value="登录"> </form>
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); // byte[] bytes = name.getBytes("ISO-8859-1"); // name = new String(bytes, "UTF-8"); String password = request.getParameter("password"); System.out.println("name:" + name); } }
示例 2 :

返回中文的响应

在Servlet中,加上

response.setContentType("text/html; charset=UTF-8");
返回中文的响应
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); String html = null; if ("admin".equals(name) && "123".equals(password)) html = "<div style='color:green'>登录成功</div>"; else html = "<div style='color:red'>登录失败</div>"; response.setContentType("text/html; charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.println(html); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-03-18 为什么将GET改为POST呢???
TuoAiTang
为什么将GET改为POST呢???








答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-08-22 getBytes方法不是用来得到编码的字节数组吗?
a38733045
但为什么编码用ISO-8859-1之后用utf8居然能解码成功??




2 个答案

一杯长岛下肚 答案时间:2017-12-28
勇士!

a38733045 答案时间:2017-08-22
查了很久终于弄清楚机制了。。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 这句话加上去以后,浏览器把输入的参数编码成utf-8的字节发送给了tomcat tomcat对于post提交的数据默认的编码方式是ISO-8859-1,也就是它用ISO-8859-1解析了utf-8编码之后的字节。 String name=request.getParameter("username"); 这里传递给name的就是被错误解码之后的乱码。 但是由于ISO-8859-1是单字节编码。 所以byte[] bytes= name.getBytes("ISO-8859-1");进行重新编码可以得到没有被tomcat解析过的utf8字节串。 然后再用utf-8解码就能得到本来的数据了。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-08-09 控制台显示乱码
2017-06-24 servlet解码的问题
2016-10-17




提问之前请登陆
关于 J2EE-Servlet-中文问题 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图