一.IO流读取文件出现乱码
例:
BufferedReader in = new BufferedReader(new FileReader(myFile));
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);
改为:
BufferedReader in = new BufferedReader(new FileReader(myFile));
BufferedReader bufr = new BufferedReader( new InputStreamReader( in, "UTF-8") );
二.filter过滤器设置编码
首先在web.xml中配合编码格式:
<filter>
<filter-name>GetHtml</filter-name>
<filter-class>com.zhibei.gethtml.GetHtml</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>GetHtml</filter-name>
<url-pattern>/filter</url-pattern>
</filter-mapping>
再看过滤器
public class SetCharacterEncodingFilter implements Filter { //要实现Filter接口
//存储编码格式信息
private String encoding= null;public void destroy(){
}
public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)
throws IOException,ServletException{
//转换
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
/*
* 判断在web.xml文件中是否配置了编码格式的信息
* 如果为空,则设置编码格式为配置文件中的编码格式
* 否则编码格式设置为UTF-8
*/
if(this.encoding != null && !this.encoding.equals("")){
request.setCharacterEncoding(this.encoding);
response.setCharacterEncoding(this.encoding);
}else{
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
}
/*
* 使用doFilter方法调用链中的下一个过滤器或目标资源(servlet或JSP页面)。
* chain.doFilter处理过滤器的其余部分(如果有的话),最终处理请求的servlet或JSP页面。
*/
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException{
//获取在web.xml文件中配置了的编码格式的信息
this.encoding = config.getInitParameter("encoding");
}}
过滤器编码源自大佬文章:https://blog.csdn.net/culous/article/details/52829668