您的位置:首页 > 其它

中文乱码问题的解决方案

2016-08-10 15:07 281 查看
以POST方式提交包含中文字符的表单

以GET方式提交包含中文字符的表单

JSP文件的编码问题

在程序里将请求的字符编码方式修改为GBK,如果请求处理完以后,返回给浏览器的内容也包括中文的话,还需要设置内容的编码方式也是GBK。

对于Servlet来说,需要加入以下这两句:

request.setCharacterEncoding("GBK");
response.setContentType("text/html  ;charset=GBK"); //这里我比较推荐UTF-8


对于JSP,则需要加上这两句:

<%@ page contentType="text/html ;charset=GBK"%>
<% request.setCharacterEncoding("GBK");%>


GET方式的中文字符是包含在URL里面的,不属于HTTP请求的正文部分,采用setCharacterEncoding()方式是没有作用的,需要用以下代码,将字符串按照指定的编码方式进行重新包装。

String param = request.getParameter("param");
param = new String(param.getBytes(),"GBK");


针对不同编辑器会出现的乱码问题。

<%@ page language="java" pageEncoding="UTF-8"%>


如果还是不行可以试试过滤器。

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;

public class CharFilter implements Filter {

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws ServletException, IOException {
if (req.getCharacterEncoding() == null) {
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html   ;charset=UTF-8");
chain.doFilter(req, res);
}
}

@Override
public void init(FilterConfig config) throws ServletException {
}

}


<filter>
<filter-name>CharFilter</filter-name>
<filter-class>com.throne212.javaweb.ch12.CharFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


另外在JSP和HTML文件的头部标签中加上一句“
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
”,它可以让浏览器以UTF-8的编码方式去编码页面上的中文和输入的中文。然后再加上以上过滤器的作用,中文乱码的问题基本上就解决了。(数据库不是哈)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息