JSP之中文乱码问题总结

  首先,把我遇到的乱码问题分为三大类:

  • 一是JSP页面中文乱码
  • 二是表单提交方式为post/get时出现乱码
  • 三是cookie存储输出value出现乱码
    在这里插入图片描述

而出现乱码的根本原因是:编码和解码方式不同

一、JSP页面中文乱码

  首先明确一点,ISO-8859-1编码方式不识别中文。下图中,把中文字符“我是中文”用ISO-8859-1编码后载解码输出,就乱套了:
在这里插入图片描述
   而我们采用UTF-8的方式编码再解码,不会出现乱码:
在这里插入图片描述

1.问题描述

   回归正题,这个JSP页面中文乱码问题是指,在记事本(jsp编辑器)中,写入中文
在这里插入图片描述

  但是浏览器运行jsp页面时,全变成了乱码:
在这里插入图片描述
  我又去查了它的Java文件,里面的输出语句也是乱码:
在这里插入图片描述

2.问题解释及解决

  这是因为我们写的文件编码方式是UTF-8,
在这里插入图片描述
  Tomcat的默认编码是ISO-8859-1,这种编码不识别中文(Tomcat是将jsp文件变为Java文件的,这也就解释了为什么Java文件里的输出语句也是乱码),所以我们需要提醒他它将其编码改成UTF-8,就要在文本最前面加一句(这句话不仅能提醒解码方式,而且也规定了JSP页面的编码方式是UTF-8,就算记事本的默认编码是别的,加上这一句编码方式就改成了UTF-8,我猜的):

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

3.之前讲的都是以默认编码方式为UTF-8的记事本为例,那么用Eclipse开发呢?

注:之前eclipse配置的时候把编码设置改为了UTF-8,改的应该不包括jsp文件,只是改了Java文件的编码方式。
  解答:Eclipse中默认JSP文件的编码方式为:ISO-8859-1,如果只把下面的缺省编码改为UTF-8的话,还是无法提示浏览器用什么解码,所以最好的方案是和记事本一样在JSP文件的第一行加一行:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

  这样不仅把编码方式改了,而且能提醒浏览器解码时用UTF-8。
  如果在配置里面直接更改的话,把图中下面的“默认编码”改成“UTF-8”
在这里插入图片描述

二、表单提交方式为post/get时出现乱码

1.问题描述

  用表单提交的中文字符,在接收页面显示的是乱码

2.问题解释及解决方法

  出现这种情况的原因是:在Tomcat的源代码实现中,默认采用ISO-8859-1方式(要变只能在server.xml下改变Tomcat的配置,但这种方式对提交方式为post时没有用哇)将表单输入信息编码,而Windows系统下浏览器默认的提取方式(解码)却不是ISO-8859-1方式,是GB2312。但是我觉得最直接的原因是ISO根本不识别中文。

  解决方法如下,在接收页面将中文字符编码再解码一遍:
在这里插入图片描述
  下面是对用到的两个函数的解释:
在这里插入图片描述

三、cookei的value存入再输出,出现乱码

1.问题描述

  将request.getRemoteAddr()获取的地址存入cookie的value中,再输出后是“????”形式的乱码

2.问题解决

  查询得知,这是由于cookie的value中存在特殊的符号,request.getRemoteAddr()获取的地址不能直接存储进去,需要以utf-8形式编码后储存:

      String newValue=URLEncoder.encode(request.getRemoteAddr(), "utf-8");
      Cookie cookie = new Cookie("IP",newValue);

  输出时也要采用utf-8的解码方式:

value = URLDecoder.decode(value, "utf-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值