java乱码问题处理
关于乱码,我在网上看到一篇文章讲的很细致,可以参考一下:
乱码
我们在做JavaWeb项目时,经常会遇到乱码问题,这是无法避免的。产生乱码的原因有很多。例如Tomcat、jsp、html、http(get、post请求乱码问题)。所以产生乱码之后我们应该先确定产生乱码的原因,然后对症下药。下边介绍几种解决乱码问题的方法。
-
html页面中中文乱码。
a. 问题:html中出现乱码的主要原因是html源码中文字内容与html编码不同造成。网页的编码为ISO-8859-1,二中文编码为utf-8。
b. 解决方法:在页面顶部…中加上以下代码<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
jsp页面中中文乱码。
a. 问题:jsp文件通常头部是自动生成的,而默认的编码往往是ISO-8859-1,其不支持中文,所以页面中会出现乱码。
b. 解决方法:页面顶部代码参看下列代码<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
-
http请求乱码问题。
a. get请求乱码。
解决方法:在后台获取到字符串后对编码进行转化,如常见的编码ISO-8859-1,代码如下String name = request.getParameter("name"); name=new String(name.getBytes("ISO-8859-1","utf-8"));
b.post请求乱码。
response.setCharcacterEncoding("utf-8");
-
关于配置Tomcat的URIEncoding。
a. 问题:程序需要发送http GET请求到服务器,请求的参数中包含了中文字符。程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送。使用的tomcat服务器,但服务器端后台程序中取到的参数的中文是乱码。
b. 解决方法:修改Tomcat的Server.xml(Tomcat安装目录下),在Connector标签中加上URLEncoding参数。<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="99" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
除了使用上述方法解决乱码问题外,还可以使用过滤器解决。
- 首先写一个Java Class ,让其实现Filter类
package servlet; 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 CharacterEncode implements Filter { String encode=null; @Override public void destroy() { // TODO Auto-generated method stub encode=null; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub if (encode!=null) { request.setCharacterEncoding(encode); response.setContentType("text/html;charset="+encode); } filterChain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub encode=filterConfig.getInitParameter("encoding"); } }
- 在web.xml中配置过滤器
<filter> <filter-name>CharacterEncode</filter-name> <filter-class>servlet.CharacterEncode</filter-class> <init-param> <param-name>encode</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncode</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
经过以上设置,乱码问题就可以解决,我们就可以愉快的继续写项目了,哈哈哈。