Android 向J2ee提交请求出现乱码问题

来源:互联网 发布:鸳鸯阵 知乎 编辑:程序博客网 时间:2024/05/18 02:46

1. 在Android提交参数给Server端时,没有对中文参数进行URL编码。

2. Tomcat服务器默认采用的是ISO8859-1编码得到参数值


解决方法:

第一步:在Android端:

URLEncoder.encoder("xxxx", "UTF-8");

这个方法最好可以把UTF-8指定为可变参数传入方法中,这样可以有多种编码选择。


第二步:在WEB端

使用:

String name = request.getParameter("name");name = new String(name.getBytes("ISO8859-1"), "UTF-8");

或者使用过滤器:

web.xml

<filter><filter-name>encodingFilter</filter-name><filter-class>cn.itcast.filter.EncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

EncodingFilter.java

package cn.itcast.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 功能: *  * @author: Dell_lipeng * @dateTime : 2014-11-30 下午6:04:09 */public class EncodingFilter implements Filter {private String encoding = null;@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;CharacterEncodingHttpServletRequestWrapper requestWapper = new CharacterEncodingHttpServletRequestWrapper(request, encoding);CharacterEncodingHttpServletResponseWrapper responseWapper = new CharacterEncodingHttpServletResponseWrapper(response, encoding);chain.doFilter(requestWapper, responseWapper);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {        this.encoding = filterConfig.getInitParameter("encoding");}}

CharacterEncodingHttpServletRequestWrapper.java

package cn.itcast.filter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;/** * 功能: * @author: Dell_lipeng * @dateTime : 2014-11-30 下午6:33:04 */public class CharacterEncodingHttpServletRequestWrapper extendsHttpServletRequestWrapper {private String ecoding = null;private String oldEncoding = null;public CharacterEncodingHttpServletRequestWrapper(HttpServletRequest request, String encoding) {super(request);this.ecoding = encoding;this.oldEncoding = request.getCharacterEncoding();}@Overridepublic String getParameter(String value) {try {if ((oldEncoding == null || isIOS88591(oldEncoding))&& super.getParameter(value) != null) {return new String(super.getParameter(value).getBytes("iso-8859-1"), ecoding);} else {return super.getParameter(value);}} catch (Exception e) {e.printStackTrace();return null;}}private boolean isIOS88591(String endcoding) {endcoding = endcoding.toLowerCase();return endcoding.startsWith("iso") && (endcoding.indexOf("8859") != -1)&& endcoding.endsWith("1");}}

CharacterEncodingHttpServletResponseWrapper.java

package cn.itcast.filter;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;/** * 功能: *  * @author: Dell_lipeng * @dateTime : 2014-11-30 下午6:44:05 */public class CharacterEncodingHttpServletResponseWrapper extendsHttpServletResponseWrapper {private String ecoding = null;public CharacterEncodingHttpServletResponseWrapper(HttpServletResponse response, String encoding) {super(response);this.ecoding = encoding;}public void setContentType(String value) {super.setContentType("text/html;charset=" + ecoding);}}


0 0