jsp接收如form提交的中文出现乱码的解决办法:
办法一:
直接用过滤器:
import java.io.IOException;
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.ServletException;
/** * * Filter that sets the character encoding to be used in parsing the incoming * request, either unconditionally or only if the client did not specify a * character encoding. Configuration of this filter is based on the following * initialization parameters: *
* * - encoding - The character encoding to be configured for
* this request, either conditionally or unconditionally based on the * ignore initialization parameter. This parameter is required, * so there is no default. * - ignore - If set to "true", any character encoding
* specified by the client is ignored, and the value returned by the * selectEncoding() method is set. If set to "false, * selectEncoding() is called only if the * client has not already specified an encoding. By default, this parameter is * set to "true". *
* * * Although this filter can be used unchanged, it is also easy to subclass it * and make the selectEncoding() method more intelligent about * what encoding to choose, based on characteristics of the incoming request * (such as the values of the Accept-Language and * User-Agent headers, or a value stashed in the current user's * session. *
*/
public class CharacterEncodingFilter implements Filter { /** * The default character encoding to set for requests that pass through this * filter. */ protected String encoding = null;
/** * The filter configuration object we are associated with. If this value is * null, this filter instance is not currently configured. */ protected FilterConfig filterConfig = null;
/** * Should a character encoding specified by the client be ignored? */ protected boolean ignore = true;
/** * Take this filter out of service. */ public void destroy() { this.encoding = null; this.filterConfig = null; }
/** * Select and set (if specified) the character encoding to be used to * interpret request parameters for this request. * * @param request * The servlet request we are processing * @param chain * The filter chain we are processing * * @exception IOException * if an input/output error occurs * @exception ServletException * if a servlet error occurs */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); }
// Pass control on to the next filter
chain.doFilter(request, response);
}
/** * Place this filter into service. * * @param filterConfig * The filter configuration object */ public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true; else if (value.equalsIgnoreCase("true")) this.ignore = true; else if (value.equalsIgnoreCase("yes")) this.ignore = true; else this.ignore = false;
}
/** * Select an appropriate character encoding to be used, based on the * characteristics of the current request and/or filter initialization * parameters. If no character encoding should be set, return * null . * * The default implementation unconditionally returns the value configured * by the encoding initialization parameter for this * filter. * * @param request * The servlet request we are processing */
protected String selectEncoding(ServletRequest request) { return (this.encoding); } }
|
<!-- ==================== Filter to set character encoding on each request ================= --> <filter> <filter-name>Set Character Encoding</filter-name> <filter-class> **.**.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> <init-param> <param-name>ignore</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>exposeInternals</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
|
办法二:
post方式提交的:request.setCharacterEncoding("GBK");
get 方式提交的:new String(string.getBytes("ISO8859_1"),"GBK");
阅读(487) | 评论(0) | 转发(0) |