servlet的xx方式传值中文乱码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //POST提交解决乱码的方式 与GET方式不同的是请求new String(nameParam.getBytes("iso8859-1"), "UTF-8"); 响应是相同的 req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); String nameParam = req.getParameter("name");//很奇怪 form表单获取的数据 乱码 //一般情况下,服务器默认的编码是“iso8859-1”,所以我们需要数据还原,然后再转换成UTF-8的形式 //不允许我去转呀 报错---解决:修改tomcat的server.xml文件 添加 URIEncoding="UTF-8" useBodyEncodingForURI="true" 哈哈 完美解决 好累 //nameParam = new String(nameParam.getBytes("iso8859-1"), "UTF-8"); System.out.println("找到了:"+ nameParam);//第一次进来null 输入店员姓名 点击查询 输出???é??
具体三种方式解决:------------第三种完美解决 也正是大家不太熟悉的方法 不知看到此文后你的问题有没有解决哪?
方法一: get方式提交的参数编码,只支持iso8859-1编码。因此,如果里面有中文。在后台就需要转换编码,如下 String bname = request.getParameter("bname"); bname = new String(bname .getBytes("iso8859-1"),"utf-8"); 前提是你页面编码就是utf-8,如果是gbk,那上面那句代码后面就改成gbk。 But修改后我的问题仍没解决,继续。。。 方法二:在客户端使用 URLEncoder.encode(“中文”,”UTF-8”)对中文参数进行编码,在服务器端需要进行解码this.setName(java.net.URLDecoder.decode(name, “UTF-8”)); 比较麻烦! 方法三:修改tomcat的server.xml文件: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" /> 在其中添加URIEncoding="UTF-8" useBodyEncodingForURI="true"这一句。我使用的tomcat8,之前没有添加useBodyEncodingForURI="true",所以还是乱码,添加后问题解决!
当然 每次Servlet中总会有各种各样的中文请求,为了避免在每个Servlet种都添加request.setCharacterEncoding(“utf-8”)或者response.setCharacterEncoding(“utf-8”),为此可以考虑添加一个中文过滤器 具体代码如下:
1.web.xml
<filter> <filter-name>CharsetEncodingFilter</filter-name> <filter-class>com.pers.hoobey.filter.CharsetEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <!-- 指定字符编码为UTF-8 --> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharsetEncodingFilter</filter-name> <!-- 过滤所有的jsp页面的请求 --> <url-pattern>*.jsp</url-pattern> </filter-mapping>
2.CharsetEncodingFilter
//采用filter统一处理字符集 public class CharsetEncodingFilter implements Filter { private String encodeString; @Override public void init(FilterConfig filterConfig) throws ServletException { // 从init-param中获取param-name为encoding参数的值 encodeString = filterConfig.getInitParameter("encoding"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("begin"); // 设置字符集 request.setCharacterEncoding(encodeString); // 继续向下执行,如果还有其他filter继续调用其他filter,没有的话将消息发送给服务器或客户端 chain.doFilter(request, response); System.out.println("end"); } @Override public void destroy() { } }
你们都是有经验的开发人员