java web开发中文乱码解决方法详解

在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" onsubmit="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);


问题解决了,哈哈哈...

posted @ 2014-04-10 20:29  培杰  阅读(730)  评论(0编辑  收藏  举报