当前位置:编程学习 > JAVA >>

servlet上添加新功能后,获得的表单信息变乱码

servlet 3.0获取表单的中文信息,显示到结果页面,那些信息是正确(没有乱码)的,但是我给servlet加上上传文件的功能之后,那些中文信息就成乱码了(不是上传的文件名)。这要怎么解决啊?

下面图片是上传功能还没实现:



下面图片是实现上传功能:



表单jsp代码
   
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
……
 <form method="post"  action="newupload" enctype="multipart/form-data">
          <table width="700">
       <tr>
    <td>计划名称:</td>
    <td><input name="name" type="text" size="30" maxlength="20"></td>
    </tr>
      <tr>
    <td>计划内容:</td><td><input name="test" type="text" size="30" maxlength="20"></td>
    </tr>
   <tr>
    <td> 附件:</td><td><input type="file" name="file"></td>
    </tr>
<tr>
<td><input type="submit"  value="上传" ></td>
</tr>
</table>
    </form>


servlet代码

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//上传功能
request.setCharacterEncoding("UTF-8");
Part part=request.getPart("file");
String value=part.getHeader("content-disposition");
System.out.println(value);
//获取文件名
String fileName=value.substring(value.lastIndexOf("=") + 2 , value.length()-1);
System.out.println(fileName);
String checkFile="";
String filename="";

//有文件就上传,没文件跳过
        if (!"".equals(fileName) && fileName!=null)
        {
//文件后缀名检验
         checkFile=fileName.substring(fileName.lastIndexOf("."));
         System.out.println(checkFile);
         if (".txt".equals(checkFile))
         {
             filename=fileName.substring(0,fileName.length()-4);
             System.out.println(filename);
             part.write(SAVE_PATH + "/" + fileName);
         }
         else System.out.println("文件不符合上传要求,上传不成功");
        }

//显示
String name=request.getParameter("name");
String test=request.getParameter("test");

request.setAttribute("msg1",name);
request.setAttribute("msg2",test);
request.setAttribute("msg3",filename);

request.getRequestDispatcher("/result.jsp").forward(request, response);

}


result页面

  <body>
    <table border="1" >
    <tr>
    <td>${msg1}</td>
    </tr>
        <tr>
    <td>${msg2}</td>
    </tr>
        <tr>
    <td>${msg3}</td>
    </tr>
    </table>
  </body>
Servlet 乱码 --------------------编程问答-------------------- 你在Servlet里面的request.setCharacterEncoding("UTF-8");后面加上
response.setContentType("text/html;charset=utf-8");
祝你好运! --------------------编程问答--------------------
引用 1 楼 xiaoshuidi123 的回复:
你在Servlet里面的request.setCharacterEncoding("UTF-8");后面加上
response.setContentType("text/html;charset=utf-8");
祝你好运!


还是不行啊,现在只能用new String(request.getParameter("describe").getBytes("ISO-8859-1"),"UTF-8");这种方法。但是昨天我那些程序(带有上传功能那些)都好好的,但因为我要解决某一个地方里的乱码问题,用了new String(request.getParameter("describe").getBytes("ISO-8859-1"),"UTF-8");这个方法后,那些带有上传功能的表单就全变乱码了,即使改回来还是乱码。 --------------------编程问答-------------------- myeclipse的设置,我认为我全都设置好了(设置成utf-8,在这以前一直用都没出过问题,就是昨天就开始出问题了),过滤器也有了,连tomcat里的server.xml里也加上了URIEncoding="UTF-8",但问题依旧。 --------------------编程问答-------------------- 首先你看下web.xml中是否有配置关于编码转换的过滤器作怪,然后
看下result。jsp页面的编码是否是UTF-8,包括文件右键-》属性中的编码也是UTF-8吗???

另外URIEncoding="UTF-8"只对get请求有效果。。。 --------------------编程问答-------------------- 对了啊 ,楼主用的什么插件 做的上传功能,,你直接这样子获取的参数???
        String name=request.getParameter("name");
        String test=request.getParameter("test");
能得到????????
我晕了。。
表单中使用了enctype="multipart/form-data",那么都是以二进制的格式传递到后台的。。。
http://hi.baidu.com/dnrranskydhkwze/item/264de2722f6a53285c1789a0
这里用了smartupload插件。。

--------------------编程问答-------------------- 第一:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
第二:request.setCharacterEncoding("UTF-8");
     response.setContentType("text/html;charset=utf-8");
是在不行楼主打开火狐或者谷歌浏览器用firebug看看传到后台的参数是否乱码,是的话urldecode一下

--------------------编程问答-------------------- debug进入后台看获取的是不是乱码? --------------------编程问答--------------------
引用 4 楼 ch656409110 的回复:
首先你看下web.xml中是否有配置关于编码转换的过滤器作怪,然后
看下result。jsp页面的编码是否是UTF-8,包括文件右键-》属性中的编码也是UTF-8吗???

另外URIEncoding="UTF-8"只对get请求有效果。。。


都是UTF-8 --------------------编程问答--------------------
引用 5 楼 ch656409110 的回复:
对了啊 ,楼主用的什么插件 做的上传功能,,你直接这样子获取的参数???
        String name=request.getParameter("name");
        String test=request.getParameter("test");
能得到????????
我晕了。。
表单中使用了enctype="multipart/form-data",那么都是以二进制的格式传递到后台的。。。
http://hi.baidu.com/dnrranskydhkwze/item/264de2722f6a53285c1789a0
这里用了smartupload插件。。


我用servlet3.0实现的,我一开始就直接用String name=request.getParameter("name");来获取表单值,但是一直都没乱码,那些值突然全变乱码的。我试试你给我的那网址的方法 --------------------编程问答--------------------
引用 7 楼 skyjohson 的回复:
debug进入后台看获取的是不是乱码?


全是乱码 --------------------编程问答-------------------- 如果后台也乱码,你可以在后台手动给他转一下码应该就可以了 --------------------编程问答-------------------- 这个插件里不是说取值用getRequest()来取数组或单个数据的么?你有没有用它说明的方法来取呢?也是乱码?
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,