在java web 开发中经常遇到中文乱码问题,下面我就来为大家将这些解决方法进行汇总:
1,在eclipse中,默认的JSP编码格式为ISO-8859-1,但是此格式不支持中文,一般我们编程使用UTF-8格式,更改eclipse的编码格式方式如下:
window->preferences->General->Content Types->Text->JSP
2,当JSP页面不能保存时,page指令上增加pageEncoding="UTF-8"指明JSP采用UTF-8,这样就可以保存了。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
3,<%@ page language="java" import="java.util.*"contentType="text/html;charset=UTF-8"%>
向page指令中添加了页面内容和显示方式的设置,告诉浏览器用UTF-8的方式来显示此页面。
4,对于以POST方式提交给Tomcat服务器的表单默认编码为ISO-8859-1,用字符串的转换格式编码的方法来解决。
如:
String username=request.getParameter("username");
System.out.println(new String(username.getBytes("IS0-8859-1"),"UTF-8"));
5,由于第四种方式不是很方便,可以使用过滤器filter的形式来进行设置,以POST方式提交的表单本质上是封装在request对象中的,而request对象
是必须经过过滤器处理的,所以对于表单的中文问题,可以在filter中对所有的表单请求进行编码格式的处理。Filter从本质上讲就是一个servlet.
如:
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
在web.xml中配置:
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6,当用URL传递参数时,需要对Tomcat服务器的配置文件进行修改才可以解决。修改server.xml配置文件.
以get方式提交的表单也是如此修改
在port="8080"后加上URLEncoding="gb2312"
7,数据库中操作中文乱码问题:
a,修改URL:DBURL = "jdbc:jtds:sqlserver://localhost:1433/bank?characterEncoding=UTF-8";
但是只能保证我们写入数据库是的数据时UTF-8编码.不能保证读出的数据也是此编码。
所以只有在读取数据库的时候进行转码。
写成一个转码函数:
public String encoder(String str) throws UnSupportedEncodingException{
String result=new String(str.getBytes("ISO-8859-1"),"gb2312");
return result;
}
response.setContentType("text/html");设置服务器响应的内容格式为HTML文档格式。
response.setCharacterEncoding("UTF-8");设置服务器响应内容的字符编码格式为UTF-8。
8,
如果以上方法是在不行了,只用这样了用JS来控制,在表单提交时,JSP页面:
<script type="text/javascript">
function f(){
var ipt1 = document.getElementById("ipt1");
var parameter1 = document.getElementById("ipt1").value;
var parameter = document.getElementById("ipt");
parameter.value = encodeURIComponent(parameter1);
return true;
}
</script>
<form id="form1" method="get" action="servlet/Parameter" οnsubmit="return f()">
<table width="200" border="1">
<tr>
<td><input name="parameter1" type="text" id="ipt1" />
<input name="parameter" type="text" id="ipt" style="display: none">
</td>
</tr>
</table>
</form>
servlet中:
String parameter1 = URLDecoder.decode(req.getParameter("parameter"),"UTF-8");
resp.getWriter().print(parameter1);