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-12-01 示例二还是乱码啊,谁能救救我
加油鸭



这节示例一都能做出来,为什么示例二就是乱码啊,完全按照站主的方法啊。
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);

	}

}

							


1 个答案

加油鸭 答案时间:2018-12-02
终于不乱吗了,问题出在我用的Editplus,我把原来默认的ANSI编码也改成了UTF-8,估计就是多转码了一次,所以才乱码的,这点小问题卡了我两天,难受死了!!!




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





2018-10-10 我们该怎样来理解编码与解码
时间会说真话



要了解如下几点,才能理解透彻 1. 编码 和 解码 是什么,用utf-8来举例: 阿伦 → &#x963F;&#x4F26; 由左到右的过程,叫编码 阿伦 ← &#x963F;&#x4F26; 由右到左的过程,叫解码 2.编码和解码的方式必须一样才能避免出现乱码 假如你用utf-8编码,却用gbk来解码,那显示出来就会是乱码 3.tomcat接收到字符码之后,会直接采用ISO-8859-1方式进行解码(这是它的默认机制) 例如: 用户输入“阿伦”,浏览器采用utf-8将其编码为 &#x963F;&#x4F26; 然后发给tomcat tomcat理应用同样的utf-8来解码,但它不管不顾,依旧采用自己ISO的方式来解码,比如解码成了 ^-^ 然后显示出来, 这就是所谓的乱码。 程序员的解决办法就是先用tomcat的ISO方式再将 ^-^ 编码,恢复成 &#x963F;&#x4F26; 然后再用浏览器的utf-8方式将 &#x963F;&#x4F26; 解码, 就成功得到了 “阿伦” 整个流程: “阿伦” → &#x963F;&#x4F26; → ^-^ → &#x963F;&#x4F26; → 阿伦 这就是示例1步骤3中,先采用ISO方式编码,再用utf-8解码的原因。 另外: 作者在示例1步骤3中描述有误,颠倒了编码和解码。
byte[] bytes=  name.getBytes("ISO-8859-1");     //采用ISO方式    编码
name = new String(bytes,"UTF-8");           //采用utf-8方式     解码

							


2 个答案

怪咖小森 答案时间:2018-11-25
赞一个

我会努力学JAVA的 答案时间:2018-11-07
赞一个




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





2018-09-12 中文编码的代码之前说要放在request.getParameter()之前,后来给出来的代码却在后面
2018-06-19 说明一下,不对删除。
2018-05-08 xml响应显示中文问题
2018-03-18 为什么将GET改为POST呢???
2017-08-22 getBytes方法不是用来得到编码的字节数组吗?
2017-08-09 控制台显示乱码
2017-06-24 servlet解码的问题
2016-10-17




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

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 902680467
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图