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;
@Override
public void destroy() {
}
@Override
public 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);
}
@Override
public 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 extends
HttpServletRequestWrapper {
private String ecoding = null;
private String oldEncoding = null;
public CharacterEncodingHttpServletRequestWrapper(
HttpServletRequest request, String encoding) {
super(request);
this.ecoding = encoding;
this.oldEncoding = request.getCharacterEncoding();
}
@Override
public 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 extends
HttpServletResponseWrapper {
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);
}
}