现在的位置: 首页 > 综合 > 正文

JSP中文乱码问题

2018年05月26日 ⁄ 综合 ⁄ 共 1401字 ⁄ 字号 评论关闭

相信在做java web开发问题时 一定遇到过的中文乱码问题 我就暂且总结一下吧 不喜勿喷 欢迎大家一讨论 本文主要分为两个部分展开 

出现乱码问题的本质就是编码器的不同 浏览器中的编码方式 是我们在头文件中自己定义的 一般为UTF-8 而Servlet分装我们的参数是基于ISO-8859-1的编码方式 所以我们在后台获

输出前台获取的中文值时 一般是问号

1、基于Servlet2.X+tomca7

此处我们再分两种 一种是服务器端输出的前台获取的值时乱码 二是前台输出后天设置中文是乱码

1.1 服务器端打印乱码

我们服务器端获取前台的请求  一般是get或者是post两种房式

对于post方式输出乱码

我们只需在post方法内的第一行 设置如下代码即可  此方法只对post有效

protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		System.out.println("post = " + name);
	}

对于get方式输出乱码

由于get和post方法的数据分装不一样 我们此处的解决方法也不同

<pre name="code" class="java">protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");  //获取前台的参数
        byte[] names = name.getBytes("iso-8859-1");   //获取该参数的ISO-8859-1编码
        name = new String(names,"utf-8");             //将iso-8859-1编码转为我们的目标编码
        System.out.println("get = " + name);
    }

1.2 客户端打印乱码

同理 浏览器端打印乱码也是编码不用导致的 因此我们在相应请求时 应该设置响应页面的编码方式

protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");  //设置页面端的编码方式
		response.getWriter().write("测试");
	}

2、基于Servlet3.X + Tomcat1.8

至于servlet3.x的新特性 请参考本文 此不不再介绍      我们只介绍它与2.x在处理中文乱码的不同

我在第一次配置这样的环境时  还是按照值之前的那样 修改乱码的方式 对于post方法 依然有效 对于get方法却无效 我也是百思不得其解 后来我去掉编码 发现竟然可以正确的输出 即无须转码

抱歉!评论已关闭.