应用ssh框架,数据库是oracle的,字符集是ISO-8859-1,页面charset是gb2312的,在数据保存的时候我能够将中文转成ISO-8859-1存储到数据库中,但是在取出来之后我不想在取得数据的每个处理过程中手动的将ISO-8859-1的编码形式转换成GB2312的,想通过配置或者其它方式省时省力的转换!请问如何能够做到?

解决方案 »

  1.   

    Public String translate (String str) {
      String tempStr = "";
      try {
        tempStr = new String(str.getBytes("ISO-8859-1"), "GB2312");
        tempStr = tempStr.trim();
      }
      catch (Exception e) {
        System.err.println(e.getMessage());
      }
      return tempStr;
    }
      

  2.   

    配置WEB.XML
    在web.xml里加入这一段
    ……
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  3.   

    加一个过滤器
    spring有提供encoding的过滤器<filter>
            <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GB2312</param-value>
    </init-param>
    </filter><filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  4.   

    Hibernate自定义类型。在类型里面转一次,然后配置文件中用自己定义的类型
      

  5.   

    你然你用ssh 那你可以采用spring 的拦截机制来实现. 比较简单,在spring配置文件里面配置一个bean.然后设置一下需要拦截的bean的名称就可以来.然后你可以在你的拦截器里面进行编码转换等操作.
    我一般采用拦截器的机制来实现权限控制.或者是spring事务处理.
      

  6.   

    楼上的办法很可能是可行的,但是还是不够理想,我原来的用struts1做的项目,这个任务是自动完成的,可是到了struts2这部分就不行了,不知道为什么啊!搞了好几天了,都郁闷死了!哪位仁兄能搞定这个怪现象?
    页面上体现从数据库里面取出来的“汉族”两个字查看jsp文件的源文件显示为“&#xBA;&#xBA;&#xD7;&#xE5;”。页面头部无论设置成什么都是这个字符串。
      

  7.   

    从数据库里面取出来的字符串应该是\u00ba\u00ba\u00d7\u00e5(就是“汉族”两个字的iso-8859-1字符集的编码,不知道在这中间进行了什么转换过程。)
      

  8.   

    搞了几天了,说一下遇到的东西。
    关于字符集不行多说了,到网上搜索一下就能出现一大堆!
    说说我的具体环境和问题,然后给分了。
    首先:说说jsp文件上面的设置:
    <%@page contentType='text/html;charset=utf-8' %>
    这句里面 这个 “utf-8” 是很关键的设置,首先页面表单会根据这个指定的字符集来解析form中的输入,即把输入的东西转码成这个指定的字符集的编码形式;最后,当页面输出的时候,如果在form表单中有数据,那么jsp页面也会根据这个来解析你的表单里面的数据。
    其次:说说jsp文件的头部分的这个设置:
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    这个是指定在浏览器里面用什么编码来浏览此网页的内容。就如同在浏览器里面选择页面的语言一样,在我的测试过程中发现,如果设置了<%@page contentType='text/html;charset=utf-8' %> ,这个设置将不起作用,但是如果页面头设置成<%@page contentType='text/html;charset=8859_1' %>,这个部分又起作用了,分析可能这两个设置取字符集较大的那个来设定页面浏览用的字符集。注意:只是浏览的时候的字符编码。
    再次:说说struts2的i18n设置,这个设置是struts封装表单数据用的编码方式,在action里面得到的表单数据(不是通过request.getParameter方式获得的数据)的字符集就是这个设置指定的字符集。当action返回页面的时候,又用这个指定的字符集来封装action里面的对象。再次:说说request,可能我说的不正确,这是我的推理而已:struts2封装的request和我们平时所说的request不是一个东西,应该是requst又自己搞了一个request的对象,把action里面的对象放到里面去。具体的过程就不知道了。最后说说struts2的textfiled标签和property标签,property标签有个escape属性,能够返回未转码之前的struts2的request里面的内容,而textfiled不能够返回这个没有转码的东西。总结一下我要做的东西遇到的一点问题:
    正如我上面说的,我的数据库字符集是8859_1的,我想通过只改变配置来达到在页面上正常浏览的目的,这几天发现无论如何设置都不可以。按照正常的思维:由于我的数据库是8859_1的,在页面上显示gb2312的,所以应该在jsp页面中设置头<%@page contentType='text/html;charset=8859_1%>,设置浏览字符编码<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,struts2的i18n设置为8859_1,此时在页面中就可以正常浏览我的数据了,可是实践证明不可以,页面表单里面还是乱码!而在property标签里面使用escape="false"属性显示request里面的内容可以正常看到我的数据,即未转码前的数据是正确的。奇怪的是在struts2的下拉列表中可以正常显示,可见struts2的各个标签还是不同的。我的问题的解决办法:1:改变数据库的字符集编码为8859_1;2在数据取出来的时候进行转码,其他的设置就不是按上面说的了,在此略过。以上情况的造成个人认为可能是struts的一个漏洞,不知道有没有高人指教一下!我用的struts是struts2.0.11.