问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于request等的乱码问题

发布网友 发布时间:2022-04-22 20:45

我来回答

3个回答

热心网友 时间:2022-05-19 18:19

jsp页面显示中文乱码: jsp页面的编码方式有两个地方需要设置: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page contentType="text/html;charset=utf-8"%> 其中:pageEncoding 指的是jsp文件本身在本地保存时的编码方式。contentType的charset是指服务器发送网页内容给客户端时所使用的编码。 从第一次访问一个jsp页面开始,到这个页面被发送到客户端,这个Jsp页面要经过三次编码转换: 第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。 第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。 JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。 第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效 所以最终的解决方法为: 在jsp页面设置pageEncoding或者contentType的其中一个为支持中文的编码格式(如utf-8,gbk,gb2312)。因为设置一个的话,另一个默认会和它一样。 如果两个都设置的话,必须保证两个都是支持中文编码(不一定要一样)。 最佳建议设置如下: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page contentType="text/html;charset=utf-8"%> 2. post方式传值乱码: 由于post方式传值是通过request存储的,在另一个页面也是通过request.getParameter(String name)来提取信息,所以这种情况下的乱码主要是因为request存储信息的编码设置导致的。post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。所以使用如下语句即可得到单个正确的中文字符串:String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ; 解决方法: 在接收页面设置request.setCharacterEncoding("UTF-8")。最好通过过滤器实现每个页面都设置为request.setCharacterEncoding("UTF-8")。 3. get方式传值乱码: get方式传值有两种,一种是表单get传值,另一种是url地址传值(实质上这两种方式都是通过url参数的方式传值)。 表单方式get传值: 表单方式get传值的编码过程为,首先浏览器根据页面的charset编码方式对传值进行编码,然后提交至服务器交给tomcat,tomcat对这些信息进行解码时,采用的解码方式是由server.xml文件中的URIEncoding设置决定的,也就是说,当我们使用命令request.getParameter("")获取表单参数值时,得到的字符串,经过了charset的编码和URIEncoding的解码。 由上所知,只要charset的编码和URIEncoding的解码一致,并且支持中文,就能保证没有乱码。 设置URIEncoding的方法如下: 方法一: 修改$TOMCAT/conf/server.xml文件,在HTTP Connector或者AJP Connector的配置加上URIEncoding="gbk" <... maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gbk" /> 方法二: 使用useBodyEncodingForURI="true". 这个方法适合你的TOMCAT实例下需要跑多个不同Encoding的程序时。 <... maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" /> enableLookups="false" redirectPort="8443" protocol="AJP/1.3" useBodyEncodingForURI="true" /> 在Tomcat配置中,连接器(HTTP Connector)属性中有一个URIEncoding和
useBodyEncodingForURI属性,这两个属性设置对URL后的附加参数进行URL解码时该如何选择 字符集编码。URIEncoding用于制定URL后的附加参数的字符集编码,useBodyEncodingForURI 则说明是否采用实体内容的字符集编码设置来替代URIEncoding的设置,也就是说当 useBodyEncodingForURI属性设置为true时ServletRequest.setCharacterEncoding方法设置的字符集编码也影响getParameter等方法对URL地址后的参数进行URL解码的结果。(在/%TomCat_Home%/ conf\server.xml文件中找到 <Connector>标记,然后在后面加上useBodyEncodingForURI=true) url方式get传值乱码: 于这种方式,浏览器不会采用页面的charset方式对URL中的中文进行编码后提交至服务器(IE,FireFox都一样),而是采用系统的GBK转码为ISO-8859-1之后提交至服务器tomcat,所以这个过程为: 首先,url地址中的中文被从gbk转换成ISO-8859-1,交给tomcat后,又被tomcat根据URLEcoding解码,这种情况,只有把URLEcoding设置为gbk才能在request.getParameter("")时不出现乱码。但是这样就会影响到上面的配置,所以一个好的解决方法是,使用java.net.URLEcoder和URLDecoder对地址中的中文进行手动编码和解码。 所以一个万全的解决方法为: 1.所有页面的charset设置为UTF-8。 2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。 3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request的字符集设定为utf-8,解决请求以post方式提交的乱码问题。 4. url地址中存在中文参数时,首先对中文参数使用URLEcoder编码为utf-8,然后在request.getParameter("")接收到参数后再使用URLDecoder还原。例如: From.jsp页面: <%String username = "张某某" ; username = URLEncoder.encode(username,"utf-8"); %> <a href="to.jsp?param=<%=username %>">转入</a> To.jsp页面 <%=URLDecoder.decode(request.getParameter("param"),"utf-8")%>

热心网友 时间:2022-05-19 19:37

当表单提交到另外你个页面 当表单中有中文的时候会出现乱码 所以你只要在另一个页面的jsp脚本中写 如下:request.setCharacterEncoding("gbk");这句话的作用是把Form 中提交的元素改成中文编码的格式

热心网友 时间:2022-05-19 21:11

String name= request.getParameter("name") ;name = new String(name.getBytes("iso-8859-1"),"gbk") ;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
啤酒肚能减下去吗 一个礼拜怎么减掉啤酒肚 Win10桌面便签小工具怎么添加?一招轻松搞定! win10好用的桌面便签 手机便签APP哪个好用 桌面便签备忘录怎么添加设置? 郑州科技学院王牌专业排名一览表 跳用英语怎么说你知道该如何正确使用吗? jump基本要点 郑州科技学院视觉传达怎么样 郑州科技学院报的视觉传达专业,进入大学后能转专业么 request如何能统一编码格式? 使用Scrapy中的Request的时候,怎么把拿到的内容编码转换为utf-8 申请企业邮箱都在哪申请? 家里买了好多咖啡,快过期了,过期的咖啡有什么别的用处吗,扔了怪可惜... 过期的咖啡会产生什么有害物质吗?还能喝么? 过期咖啡怎么办? 没开封的过期咖啡还可以喝吗? 过期的咖啡还能喝吗? 咖啡过期一年能喝吗? 过期的咖啡能不能喝? 过期的咖啡还能喝吗?喝了会怎样? 律师阅卷一般要几天 委托律师的话,一般几天可以会见当事人,会不会见了后,会让我交钱啊 请一律师一天需支付其多少钱? 聘请律师的时间,距离开庭的时间,要提前几天请律师? 律师受理案子后一般几天去法庭立案? 描写律师的句子 委托律师一般几天可以见到当事人? 律师事务所星期天上班吗? 刑事拘留律师几天可以见一次 java request怎样解决复杂文字的乱码? 如何设置post请求编码 &lt;%request.setCharacterEncoding(&quot;GB2312&quot;);什么意思??? 华为手机怎么找回以前的壁纸? asp.net怎么让某一页的 requestEncoding设置成utf-8 设置编码方式有request设置和response设置他们有什么区别? request.setCharacterEncoding( gb2312 );是什么作用啊 java web 中编码流程是怎样的!request.setCharacterEncoding()和 response.setCharacterEncoding()怎么用 ResteasyClient 怎么设置请求的编码格式 为什么在Filert里面设置了编码格式还会乱码 request.getparameter()出现中文乱码 在jsp中用js接收request中的值,中文乱码 如何解决request.getParameter取值乱码问题 okhttp post请求怎么设置utf-8编码 setrequestproperty可以设置编码格式吗 request.getAttribute(&quot;name&quot;); 为什么得到乱码? 耽美的黑白情侣头像一对两张不带字左边喝饮料,右边好像在抽烟。这个是左边的,求右边的 人们的日常生活英语作文 求助 夏天天气热蜂蜜会不会坏掉 夏天蜂蜜怎么保存? 夏天蜂蜜怎么保存?