文档章节

jsp中文乱码现象解决办法

橘子_
 橘子_
发布于 02/27 10:01
字数 1236
阅读 223
收藏 0

SP页面乱码的问题,就是因为编码不符,可能出现乱码有四个地方:

1 JSP编码乱码

2 HTML编码乱码

3 request获取数据乱码

4 response输出信息乱码

5 Cookie导致的编码问题

下面将会对上面几种情况进行介绍:

JSP乱码

 

    这种是最常见的,设置编码的位置位于JSP的第一行,如果在Eclipse中新建一个JSP默认是下面这种:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

    可以看到它默认的页面编码和传输编码都是ISO-8859-1,这是用于欧洲国家的编码。

     可以通过设置Eclipse中JSP的编码格式,来修改默认生成的编码格式。

    如果想要支持中文,可以使用UTF-8、GB2312、GBK等,其中UTF-8是国际化的,哪个国家的都支持,所以推

荐使用这个。

  再来说说上面涉及到编码的两个地方:charset 和 pageEncoding

  charset是指服务器发往客户端展现时的编码;

  pageEncoding用于设置JSP页面本身的编码。

 

    JSP在部署后提供给用户使用,会经过三个阶段

  1 JSP生成java文件:这个阶段会使用pageEncoding所定义的编码格式进行转换

  2 java文件生成class文件:这个阶段由服务器tomcat自动使用utf-8编码把java文件转换成字节码class文件  

  3 通过读取class文件展现给用户:这个阶段由tomcat服务器获取字节码内容,通过使用contentType所定义的编

码格式展现给用户。

  大致过程如下图:

    这样设置好JSP中的第一行代码,就可以保证基本的JSP展现没有乱码了!

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

HTML乱码

  因为JSP中也包含HTML的内容,HTML本身也是有编码格式的。

复制代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
复制代码

    如果这部分编码出现问题,那么HTML中标签的中文命名就会出现乱码。

  HTML中因为只涉及到表现层,所以只有一个属性content中charset,这个编码格式设置对了,就没问题了。

  request中文乱码

     有时候在做jsp逻辑处理时,比如提交表单,从前台注册的页面提交了一部分的数据,但是后面处理的JSP页面

通过 request.getParameter 调用时,获取到的是一堆乱码。

  这是因为虽然前面JSP设置了编码格式,却没有在当前的JSP中设置读取数据的编码格式。

  使用下面的代码,就可以是设置request获取请求内容的数据编码:

request.setCharacterEncoding("UTF-8");

  

    需要注意的是,这种方式对 URL传参这种JSP请求 是没有作用的。比如:

<a href="jspRequest.jsp?username=lisi">url test request(en)</a>
<a href="jspRequest.jsp?username=李四">url test request(zh)</a>

    这种情况仍然会出现乱码,这种URL传参的方式,只能修改服务器tomcat的传输编码格式。

  修改tomcat安装文件 apache-tomcat-6.0.43\conf 目录下的server.xml

    添加 URIEncoding="UTF-8" ,就可以处理URL传递参数造成的中文乱码问题了。

  response输出中文乱码

    可能现在已经没有多少使用这种方式输出页面的了,但是还是有必要说一下,response输出页面元素内容时,也

会出现乱码。

  使用下面代码就可以设置response输出的编码格式:

response.setContentType("text/html;charset=UTF-8");

  cookie造成的中文乱码

    Cookie由于需要保存在客户端中,因此使用过程中都需要编码以及转码:

  在保存Cookie数据前

  首先引入java.net.*,该包中包含URLEncoder类;

  保证response与request的编码正确;

  使用URLEncoder进行转码,并保存。

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.net.*"
    pageEncoding="UTF-8"%>
<%
//保证request以及response的编码 
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

//使用URLEncoder解决cookie中中文问题
String username = URLEncoder.encode(request.getParameter("username"),"UTF-8");
String password = URLEncoder.encode(request.getParameter("password"),"UTF-8");
            
Cookie usernameCookie = new Cookie("username",username);
Cookie passwordCookie = new Cookie("password",password);
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000);
            
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
%>
复制代码

    在使用Cookie数据前

  依然要注意导入必备的包:java.net.*

  注意request的编码;

  使用URLDecoder进行解码

复制代码
<%@ page language="java" import="java.util.*,java.io.*,java.net.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
%>
<%
        request.setCharacterEncoding("UTF-8");
    
        String username = "";
        String password = "";

        Cookie[] cookies = request.getCookies();
        if(cookies!=null && cookies.length>0){
            for(Cookie c:cookies){
                if(c.getName().equals("username")){
                    username = URLDecoder.decode(c.getValue(),"UTF-8");
                    System.out.println(username);
                }
                if(c.getName().equals("password")){
                    password = URLDecoder.decode(c.getValue(),"UTF-8");
                }
            }
        }
%>
复制代码

 

本文转载自:https://blog.csdn.net/qq_40587575/article/details/79818477

橘子_
粉丝 76
博文 11
码字总数 9079
作品 0
运城
私信 提问
加载中

评论(0)

JSP表单提交中文时出现乱码

一、JSP页面显示乱码 下面的显示页面(display.jsp)就出现乱码: JSP的中文处理 <% out.print("JSP的中文处理"); %> 对 不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用...

xiaodaiyy11
2011/11/17
4.3K
2
解决servlet向mysql添加数据时的中文乱码问题

  昨晚写了一个小Demo,通过 servlet 向 mysql 中添加数据,在 dao 层使用的是 DBUtils 操作的数据库,可是在添加时偏偏出现了中文乱码问题,如下:   添加商品页面:       点击“...

H_Shun
前天
0
0
Servlet从浏览器获取数据出现乱码,高手替我解决下

本人java新手,最近初习servlet ,装好TOMCAT 7 之后能正常运行一般JSP和servlet程序,但是我试着用servlet获取html 的表单数据时却发现,只能获取英文,中文就出现乱码,试过了在servlet 的...

浪漫的菜鸟
2010/10/13
1K
3
jsf开发心得(1)-jsf配置web.xml的url-pattern时出现乱码的怪事

又是郁闷的一天!!! 汗!搞jsf应用居然打开html文件的时候居然中文出现乱码!!! 怀疑是html文件的charset=UTF-8保存的时候保存为其他的编码了,但是保存文件应该是根据这个编码保存的啊。...

覃勇铖
2013/02/28
280
0
Tomcat 中 jsp 中文乱码显示处理解决方案

原地址: http://blog.csdn.net/joyous/article/details/1504274 初学JSP,尤其是Tomcat环境(GlassFish默认UTF-8,则不存在此类问题),经常会因为中文汉字字符集设置问题导致中文乱码,本文...

无忧岛主
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP中Session ID的实现原理

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。 PHPSESSIONID的生产算法原理如下: hash_func = ...

php开源社区
24分钟前
9
0
MySQL设置允许用户远程登录

项目中需要连接虚拟机上面的MySQL数据库,但是总是出错,怀疑本机是否有连接远程数据库的权限。 执行命令: mysql> use mysql;mysql> select host,user from user; 查看结果是不是root用...

imzchloe
31分钟前
17
0
TI达芬奇系列TMS320DM8148浮点DSP C674x + ARM Cortex-A8USB OTG/USB HUB接口、SATA接口(仅DM8148)V

处理器 DM8148 TI TMS320DM8148是一款高性能嵌入式32位工业级ARM Cortex-A8+DSP C674x处理器。拥有多种工业接口资源,以下是DM8148 CPU资源框图: USB OTG/USB HUB接口 CON13、CON14为Micro...

Tronlong创龙
33分钟前
11
0
一个对二维数组进行多字段多顺序排序的方法

1,代码 <?php/** * 对二维数组依次按照排序规则数组指定的字段和顺序进行排序,在有相同的情况下按下一个字段和顺序进行排序 * @param array $arr 待排序的数组 * @param array $...

vinci321
33分钟前
19
0
2019阿里技术专家面试题大汇总(内含答案)

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次整体放出。并通过这些笔试真题开...

白楠楠
34分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部