servlet中用request.getParameter取得的值为什么是乱码

servlet中用request.getParameter取得的值为什么是乱码,第1张

乱码原因2方面:

1你request请求的编码和你的Servlet设定的编码不一致

解决方法:

在getprameter之前加入类似这样的语句设定编码:

requestsetCharacterEncoding("UTF-8");

2你输出网页的编码和你的getprameter后的得到的字符串值不一致

解决办法:

在输出页面内容时设定好编码和你Servlet默认一致:

responsesetContentType("text/html;charset=UTF-8");

这样就OK

这里以UTF-8为例,你可以改成你设定的语言,具体参数看你编辑器,editor的编码设定

用BufferedReader br = new BufferedReader(new InputStreamReader(requestgetInputStream(),"gb2312"));试试

jsp页面显示中文乱码: jsp页面的编码方式有两个地方需要设置: <%@ page language="java" import="javautil" 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="javautil" pageEncoding="utf-8"%> <%@ page contentType="text/html;charset=utf-8"%> 2 post方式传值乱码: 由于post方式传值是通过request存储的,在另一个页面也是通过requestgetParameter(String name)来提取信息,所以这种情况下的乱码主要是因为request存储信息的编码设置导致的。post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。所以使用如下语句即可得到单个正确的中文字符串:String str = new String(requestgetParameter("something")getBytes("ISO-8859-1"),"utf-8") ; 解决方法: 在接收页面设置requestsetCharacterEncoding("UTF-8")。最好通过过滤器实现每个页面都设置为requestsetCharacterEncoding("UTF-8")。 3 get方式传值乱码: get方式传值有两种,一种是表单get传值,另一种是url地址传值(实质上这两种方式都是通过url参数的方式传值)。 表单方式get传值: 表单方式get传值的编码过程为,首先浏览器根据页面的charset编码方式对传值进行编码,然后提交至服务器交给tomcat,tomcat对这些信息进行解码时,采用的解码方式是由serverxml文件中的URIEncoding设置决定的,也就是说,当我们使用命令requestgetParameter("")获取表单参数值时,得到的字符串,经过了charset的编码和URIEncoding的解码。 由上所知,只要charset的编码和URIEncoding的解码一致,并且支持中文,就能保证没有乱码。 设置URIEncoding的方法如下: 方法一: 修改$TOMCAT/conf/serverxml文件,在>

第一种方法

requestsetCharacterEncoding("GBK");

第二种方法

String a=requestgetParameter("a");

if(a!=null){

a=new String(agetBytes("ISO8859_1"),"GBK");

}

解码

解码方式多种

有时候网页也是用多种编码写的

data = datadecode('UTF-8','ignore') #('UTF-8')('unicode_escape')('gbk','ignore')多种编码自己换着来看吧

客户端向服务器端发送信息,如果发送的编码和服务器端接收的编码不一样,使用requestgetParameter()方法获取的表单信息会产生乱码。

客户端接收服务器的响应信息,如果响应编码与客户浏览器的编码不一致时,会造成中文乱码显示。

为了解决中文正常显示,可以采取以下两种方案。

(1)post方式提交表单

a,设置页面的编码

在jsp或HTML页面中,有时会涉及编码的定义,可使用统一编码,例如GBK或UTF-8

b,设置表单提交方式

在页面中,将

标记的method属性值设置为post,该属性默认为get,get方式会将表单信息采取特殊编码,然后借助于URL发送给服务器。

c,设置服务器接收编码

在使用requestgetParameter()方式接收客户表单信息之前,使用以下代码设置接收编码,编码与页面保持一致。

requestsetCharacterEncoding("UTF-8");

使用setCharacterEncoding()方法指定编码后,可以通过getParameter()方法按指定编码获得客户信息,如果不指定,则默认使用ISO-8859-1编码。

d,设置服务器端响应信息编码

设置服务器向客户端响应的信息编码,告诉浏览器采用指定编码显示,可以使用下列指令或代码。

在响应的jsp中,使用如下指令设置。

以上就是关于servlet中用request.getParameter取得的值为什么是乱码全部的内容,包括:servlet中用request.getParameter取得的值为什么是乱码、HttpServletRequest中接收到的json数据,中文乱码,如何解决详情见补充、关于request等的乱码问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9300384.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存