项目时发现以前是application/x-www-form-urlencoded的FORM提交数据时正常, 现在为表单添加个上传功能就有乱码了, 在网上看了篇文章
This problem had been bugging me for 3 days!
Background:
Use JSP and Servlet to implement file upload。The uploaded file is stored in file system, the related info like description and Mime type, size and path name is stored in MySQL。JSP and DB table both use UTF-8 CHARSET. If successfully,Servelet forwards to success page with related file info returned.
Promblem(all happened with Chinese characters):
1. On Jetty,except the filename was encoded by UTF-8(unreadable), everything is good.
2. But on Tomcat, all that characters were inserted into DB and returned to client were corrupted.
Solution:
1.No matter how you set a form's charset,Tomcat always treats it by iso 8859-1.So what we read from the input strem are 8859-1 encoded.
If we need to search a substring in the content, we have to use getBytes("ISO-8859-1") on the substring. Also, use String(subBytes, "UTF-8") to return some substrings.
2.In the success jsp, we should add <%@ page contentType="text/html;charset=UTF-8"%>.
(And the <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> is useless.)
3.In the post() method of Servlet, we must add request.setCharacterEncoding("UTF-8"); And it must sit before any sentences that read input stream.
After the previous steps, everything is good on Tomcat.
But on Jetty, the filename was still encoded by UTF-8. I tried to convert UTF-8 to system default encoding by new String(fileName.getBytes("UTF-8"), system.getProperty("file.encoding")), but no use.
看起来在Jetty上跑没事, 好像是Tomcat的编码问题, 解决方法也简单, page charset 用utf8就好了, 如果你用spring就加个filter:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
分享到:
相关推荐
`multipart/form-data`是用于处理包含二进制数据(如文件)的表单提交的编码类型,但它默认情况下不支持传递额外的文本参数。 在描述中提到了使用Apache Commons IO和Commons Fileupload这两个Java库来解决这个问题...
1. 前台jsp中,我使用的是 form post 请求,设置了 enctype=”multipart/form-data” ,页面编码格式都是utf-8 2. 后台中,我使用的是commons-fileUpload组件,ServletFileUpload 解析form表单和文件, 3. 设置 ...
### 解决JSP提交乱码的问题 在进行Web开发时,经常会遇到中文字符编码的问题,尤其是在使用JavaServer Pages(JSP)技术时。本篇文章将详细介绍如何解决JSP页面提交时出现的乱码问题,包括GET请求和POST请求两种...
而对于multipart/form-data提交的文件,需要在Servlet或Filter中处理,例如使用Apache Commons FileUpload库,并指定字符集。 总的来说,解决Web项目中的中文乱码问题,关键是确保编码的一致性,并利用适当的编程...
在`JSP`中,通常会使用`<form>`标签的`enctype="multipart/form-data"`属性来定义一个支持文件上传的表单。然后,通过`Servlet`来接收并处理上传的文件。在服务器端,`HttpServletRequest`对象的`getPart()`或`...
使用`jspSmartupload` 进行文件上传时,你需要在JSP页面中添加对应的表单元素,并设置`enctype`属性为`multipart/form-data`。在Servlet中,实例化`SmartUpload`对象并调用其方法来接收和处理上传的文件。例如: ``...
然而,文件上传过程中可能会遇到编码问题,导致中文等非ASCII字符出现乱码。本篇文章将详细探讨如何在Struts中处理文件上传并解决乱码问题。 首先,我们需要了解Struts文件上传的基本原理。在Struts中,文件上传是...
4. **上传文件时的乱码**:使用`enctype="multipart/form-data"`的表单提交文件时,需要在Servlet中解析MultipartFile对象时指定正确的编码,例如使用Apache Commons FileUpload库。 5. **Eclipse和MyEclipse中的...
在开发Java Web应用时,JSP中文乱码是一个常见问题,主要是由于字符编码不一致导致的。以下是针对这个问题的详细解析和解决方案: 1. **JSP页面编码不一致**: - JSP页面中,编码设置通常包含在两处:`...
在这个文件中,通常会包含Servlet API的相关代码,例如`Part`接口,这是Java Servlet 3.0引入的一个用于处理multipart/form-data类型表单数据的接口。这种类型的表单数据常用于文件上传,因为它可以将多个数据部分...
在JSP中,我们可以使用`<form>`标签设置`enctype="multipart/form-data"`来开启文件上传功能。然后,服务器端需要解析这些多部分的数据,这通常是通过使用Apache Commons FileUpload库来完成的。FileUpload库提供了...
本实例将详细介绍如何在Struts环境中使用Eclipse IDE和Tomcat服务器,通过添加过滤器解决文件上传过程中的乱码问题。 首先,我们需要在Struts配置文件(通常为struts.xml)中定义一个用于处理文件上传的Action。...
它通过处理HTTP请求中的multipart/form-data内容类型,将文件数据分离出来,然后保存到服务器指定的位置。此组件易于集成,且提供了丰富的API,便于开发者进行定制。 ### 二、核心功能 1. **多文件上传**:JSp...
在JSP页面中,使用`<form>`标签的`enctype="multipart/form-data"`属性来指定上传请求类型。 接下来,我们需要确保服务器端接收请求时正确地解析了编码。这通常涉及设置HttpServletRequest对象的字符编码。例如,...
1. **设置请求编码**:确保JSP页面中的`<form>`标签设置了正确的编码类型,例如`<form method="post" enctype="multipart/form-data" accept-charset="UTF-8">`,这样可以确保客户端发送的数据使用UTF-8编码。...
在JSP页面中,你需要创建一个`enctype="multipart/form-data"`的表单,并使用Struts2的`s:file`标签来指定文件输入框: ```jsp <form action="upload.action" method="post" enctype="multipart/form-data"> 选择...
- **Commons FileUpload库**:Apache Commons FileUpload库是处理文件上传的常用工具,它可以处理multipart/form-data类型的请求。 3. **文件下载**: - **HTTP响应头**:在服务器端设置适当的HTTP响应头,如`...
在JSP页面中,可以设置form表单的enctype属性为"multipart/form-data",以便支持文件上传: ```jsp <form action="uploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="file" ...
### JSP上传、下载文件示例详解 #### 文件上传知识点 **一、文件上传概述** 在JSP(Java Server Pages...同时,在实际应用中还需要考虑到诸如文件大小限制、类型过滤、中文乱码等问题,以确保系统的稳定性和安全性。
- **上传文件的编码问题**:对于使用`enctype="multipart/form-data"`的文件上传表单,`request.setCharacterEncoding()`无效,需在过滤器或其他适当位置进行处理。 - **URL重定向**:在URL重定向时,如果URL包含...