java web开发中常见的乱码问题



   在web应用中,包括浏览器、web服务器、web应用程序中和数据库等部分,每一部分使用的不同的字符集,是的字符数 据在字符集之间传递时出现中文乱码问题。

首先看为什么会出现乱码问题:

 

常见的乱码解决方案:

  1. JSP/Servlet主要的几种编码方式 (前两个只使用于JSP,而后两个适用于JSPServlet

    1. PageEncoding=” ” 作用是设置jsp编译成servlet时使用的编码

    2. contentType=“text/html;charset=”””的作用对服务器响应进行重新编码

    3. Request.setCharacterEncoding”utf-8”)作用是对客户端请求进行重新编码

    4. Response.setCharacterEncoding(“”)的作用指定服务器端响应客户端请求进行重新编码

      说明:JSP转化成servlet文件时,若没有指定编码方式,则将按照JVM的默认编码进行编码,如果该编码不支持中文,则在这块就出现乱码问题。

       2.  Java web开发中文乱码问题

     2.1 页面显示乱码包括浏览器显示出现乱码、后台在生成界面的时候,其内容本身就乱码

       2.1.1 若为浏览器显示乱码,需要设置JSPServletcontentType的属性

  1. 2.1.2 Servlet生成界面本身就乱码:

    可以在输出页面之前调用responsesetContentType方法

     

    2.2用户提交的数据是乱码

     2.2.1  表单用post方式提交数据,所以要设置请求对象的字符编码  Request.setCharacterEncoding(“”)

            在响应页面使用 response.setCharacterEncoding(“”)

            说明: 如果处理的页面较多时可以使用过滤器进行处理,这里建议使用过滤器解决。

      2.2.2  表单中使用get方式提交数据或者通过URL提交的数据,只在接收数据的JSP文件或Servlet文件中设置request.setCharacterRncoding()是不行的。因为tomcat默认用iso8859URL提交数据进行编码的。这是需要修改tomcatservlet.xml文件在Port号为8080connector元素增加一个属性URLEncoding=”utf-8”.

注意: get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址,用户是看不到的。

2.2.3数据库中数据是乱码

   mysql5.0为例

               1.向表中插入中文,先把中文字符编码转化为iso8859-1编码,然后再插入到表中。读取的时候把数据库中的内容转化为gb2312编码在进行读取。

               2.修改mysql的配置文件,打开MySQL——home下的my.init文件,把mysqld区的语句defaulr-characterset=….修改为defaulr-characterset=GB2312

               在[client] 区增加defaulr-characterset=‘GB2312’修改后数据库默认支持的编码格式就被改为gb2312.

  1.  

    4ajax请求的乱码问题

                 如果使用ajax出现了乱码问题这样解决:前端ajax函数的请求的url里面中文参数用两个encodeURI()函数处理,var url = "user.dop=checkUser&name=" + encodeURI(encodeURI(username.value));而服务器端则用 URLDecoder.decode()函数去接收,string userName = URLDecoder.decode(request.getParameter("name"),"utf-8");  这样就能够解决ajax请求中乱码的问题了。

     

你可能感兴趣的:(Servlet)