• JAVA中的一些乱码问题的处理方法

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • ajax中的中文乱码

      今天我通过ajax向服务器端发送了一些中文,结果返回来的为一堆乱码,我检查了一下jsp页面编码方式为UTF-8,而JAVA程序中第一句也为response.setContentType("text/html;charset=utf-8");编码是一致的,后来将JAVA程序中的编码改为GBK,而问题仍然没有解决。也曾经在传送数据时将中文编码,但都没有解决问题。最后发现在ajax传送数据时采用的为GET方法,部分代码如下:

    url:’/do/ko?action=modifyLearningGoal&modkoId=‘+modkoId+’&learningGoal=’+learningGoal,
    type:’GET’,
    dataType : ’json’,
    后来将传送方式改为POST,部分代码如下:

    url:’/do/ko?action=modifyLearningGoal’,
    type:’POST’,
    data : {modkoId:modkoId,learningGoal:learningGoal},
    dataType : ’json’,
    问题解决。但是具体GET和POST为什么会产生这种差别,还不清楚,大家可以讨论一下!

    为了避免以后遇到类似问题,我将一些常见的中文乱码问题整理如下:(大家可以补充)

    • 一、JSP与页面参数之间的乱码

        JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。

      如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决。

      如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:

      web.xml:

      CharacterEncodingFilter

      net.vschool.web.CharacterEncodingFilter

      encodingGBK

      CharacterEncodingFilter

      /*

      CharacterEncodingFilter.java:

      public class CharacterEncodingFilter implements Filter

      {

      protected String encoding = null;

      public void init(FilterConfig filterConfig) throws ServletException

      {

      this.encoding = filterConfig.getInitParameter("encoding");

      }

      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

      {

      request.setCharacterEncoding(encoding);

      response.setContentType("text/html;charset="+encoding);

      chain.doFilter(request, response);

      }

      }

    • 二、Java与数据库之间的乱码

        大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。

    • 三、Java与文件/流之间的乱码

        Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。

    • 四、GET方法传递中文中的乱码

       解决方法是采用java.net.URLEncoder的 Encode方法强制转码,缺点是会使JSP页面代码相当的长,但是目前还没有其他好的解决办法,我想最好的办法就是不用中文做为参数传递:写法如:<a href="TestAction.do?name=<%= java.net.URLEncoder.encode("你好","UTF-8")%>

    • 五、Js中获得当前页面url(url中含有中文)中文乱码问题

    var redirectURL = this.location.href;

     redirectURL = escape(redirectURL);

    redirectURL = redirectURL.replace(/\&/g, "%26");
     redirectURL = redirectURL.replace(/\+/g, "%2B");

    window.location.href = "/do/user?action=xx&redirectURL="+redirectURL;

    然后action中解析传过去的地址就是正常的,不会有乱码问题。

    • 标签:
    • charset
    • redirecturl
    • 中文
    • 文件
    • java
    • 编码
    • 参数
    • java
    • 乱码
    • 学习元
    • 方式
    • 页面
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部