栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JSP中的乱码问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSP中的乱码问题

JSP中的乱码问题

文章目录


Tips
    JSP中默认使用的字符编码方式:iso-8859-1,不支持中文tomcat8中已修订,不存在这个乱码问题 (待验证)常见的支持中文的编码方式
编码方式收录的字符
gb2312常用简体汉字
gbk简体和繁体汉字
utf-8所有国家需要的字符

问题分析

参考文章:
  Tomcat的URIEncoding、useBodyEncodingForURI和CharacterEncodingFilter
  由StringHttpMessageConverter引出的客户端服务器端之间的乱码过程分析
  URL汉字编码问题以及乱码解决
  URIEncoding和UseBodyEncodingForURI的解释
  Post,Get请求乱码的原因和解决方案

    当我们在表单中输入参数跳转后,地址栏会显示 http://localhost:8080/test?userName=张三&userPwd=1&rePwd=1&bd=手机号,如果复制地址后粘贴,则内容为 http://localhost:8080/day0321/login/doLogin.jsp?userName=%E5%BC%A0%E4%B8%89&userPwd=1&rePwd=1&bd=%E6%89%8B%E6%9C%BA%E5%8F%B7,这是编码后的地址,采用的何种编码方式称为URL编码
    (chrome浏览器始终以UTF-8的编码形式将中国转换成字节数组)当浏览器发送请求时,服务器是以请求的content-type来解析请求数据的,当浏览器请求没有指定content-type时,Tomcat服务器默认采用ISO-8859-1由于两种编码方式不一样,因此出现乱码
解决方法
    设置请求和响应的编码方式(适用于post)
request.setCharacterEncoding("utf-8");//设置请求的编码
response.setCharacterEncoding("utf-8");//一般page已经设置过utf-8了,这一句可以不加
<%@ page language="java" contentType="text/html; charset=utf-8"%>
    get请求出现乱码
      ① 治标:new String( s.getBytes("iso-8859-1"), "utf-8" );
      ② 治本:配置 tomcatconfserver.xml 文件
        URIEncoding="UTF-8":统一设置用于解码URL的字符编码(包括地址和参数),默认值为ISO-8859-1
        useBodyEncodingForURI="true":表示是否用request.setCharacterEncoding设置的编码对请求参数(不包括地址)进行解码,默认false,主要用于Tomcat4.1.x中。

为什么post 与 get 两种提交方式的解决方案不同

POST
  ① 其编码是由页面来决定的,即ContentType(“text/html; charset=utf-8”)
  ② 当提交表单时,浏览器首先会根据ContentType的编码格式对参数进行编码,然后提交给服务器。
  ③ 在服务器端同样也是用ContentType的编码来进行解码

GET
  ① GET提交方式会将参数附加到地址中,因此参数的编码是由URL编码来决定的
  ② page中的ContentType 与request.setCharacterEncoding方法未对HTTP文头的内容进行解码
  ③ 因此GET方法依旧使用默认ISO-8859-1进行解码
  ④ 想要正确解码必须设置 URIEncoding 或者 设置完request.setCharacterEncoding再设置useBodyEncodingForURI

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781443.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号