`

Ejb中的字符编码转换问题

    博客分类:
  • EJB
EJB 
阅读更多
我们在使用Ejb时,有时候读取出来的数据或者往数据库中插入数据时显示为乱码,这真是件让人郁闷的事,不过最近我找了一种很好处理的方法,也供给大家参考下:
如果要将数据从数据库中读出来的时候要将编码从ISO8859_1转换为GBK:就调用ISO2GBK(String a)方法。
如果是将数据插入到数据库中就将编码从GBK转换为ISO8859_1:就调用GBK2ISO(String b)方法。

public class EncodingConvert {
  public String ISO2GBK(String s){
       String ns = null;
       if (s == null)
           return ns;

       byte[] nbyte = s.getBytes();
       //先判断是否为GBK编码,是就不用转了
       if(nbyte.length>1 && isGBK(nbyte[0],nbyte[1]))
           return s;

       //转码
       try {
           ns = new String(s.getBytes("iso8859_1"), "GBK");
       } catch (UnsupportedEncodingException ex) {
           ex.printStackTrace();
       }
       return ns;
   }

   /**
    * 将字符串从GBK转换成ISO
    * @param s String
    * @return String
    */

   public String GBK2ISO(String s){
       String ns = null;
       if (s == null)
           return ns;
       byte[] nbyte = s.getBytes();
       //先判断是否为GBK编码,不是就不用转了
       if(nbyte.length>1 && (!isGBK(nbyte[0],nbyte[1])))
           return s;

       try {
           ns = new String(s.getBytes("gbk"), "ISO-8859-1");
       } catch (UnsupportedEncodingException ex) {
           ex.printStackTrace();
       }
       return ns;
   }

   /**
    *
    * 判断字符串是否是GBK编码
    * @param head byte
    * @param tail byte
    * @return boolean
    */
   public boolean isGBK( byte head,byte tail ){
       int iHead = head & 0xff;
       int iTail = tail & 0xff;
       return ((iHead>=0x81 && iHead<=0xfe &&
                (iTail>=0x40 && iTail<=0x7e ||
                 iTail>=0x80 && iTail<=0xfe)) ? true : false);
   }

   /**
    * 判断字符串是否为GB2312编码
    *
    * @param head byte
    * @param tail byte
    * @return boolean
    */
   public boolean isGB2312( byte head,byte tail ){
       int iHead = head & 0xff;
      int iTail = tail & 0xff;
      return ((iHead>=0xa1 && iHead<=0xf7 &&
               iTail>=0xa1 && iTail<=0xfe) ? true : false);
   }

}
分享到:
评论

相关推荐

    java字符编码转换详细过程

    ### Java字符编码转换详细过程 #### 一、Java程序的生命周期与字符编码处理流程 Java程序的生命周期可以概括为三个主要阶段:编写源代码、编译源代码以及运行编译后的类文件。在这个过程中,涉及到多种字符编码的...

    Java Bean实现字符编码转换程序.rar

    Java实现的字符编码转换程序,基于Bean的封装实现,程序通过Client触发调用Bean方法,取得Home对象的引用,然后用EJB生成库Home生成EJB对象,调用EJB对象方法printHelloWorld(),EJB对象把调用委派给Bean,同时程序...

    Java中文编码问题研究.pdf

    因此,在Java程序运行时,需要将Unicode编码转换为操作系统默认支持的编码格式,这就存在着一个从Unicode编码到对应的操作系统及浏览器支持的编码格式转换、输入、输出的问题。 二、Java中文编码问题的分析 Java...

    java中文乱码字符集[参照].pdf

    解决Java中文乱码问题的关键在于理解和控制每个阶段的字符编码转换。以下是一些最佳实践: 1. **源文件编码**:明确指定IDE或文本编辑器保存源文件时使用的编码,如在Eclipse中设置项目编码为GBK或UTF-8。 2. **...

    免费 java中文乱码字符集处理大全.docx

    Java编程语言在处理中文字符时可能会遇到乱码问题,这是由于计算机系统和Java自身编码机制之间的...开发者应关注源代码的编码设置、文件读写和网络通信中的编码转换,以确保Java程序在各种环境下都能正确处理中文字符。

    java中文问题解决大全.doc

    - `java.nio.charset`包提供了字符编码转换的功能,如`CharsetDecoder`和`CharsetEncoder`。 总的来说,解决Java中的中文问题需要对字符编码有深入理解,并在代码编写、编译和运行的各个阶段都考虑到编码的正确性...

    java面试题大全--java基础,struts,spring,ejb等

    - **编码转换**:使用`new String(byte[], "目标编码")`进行编码转换,例如: ```java String gb2312Str = "你好"; byte[] isoBytes = gb2312Str.getBytes("GB2312"); String isoStr = new String(isoBytes, ...

    Java编程中的中文问题以及解决方法

    在运行过程中,Java虚拟机(JVM)会根据不同的环境进行编码转换。例如,在输出中文字符时,JVM会尝试将UNICODE编码的字符转换为当前环境支持的编码格式,以便于正确显示。 #### 三、中文乱码的常见场景 - **跨平台...

    Java编程乱码处理方法大全(附图说明)

    总之,Java编程中的乱码问题需要开发者对字符编码有深入的理解,并且在各个层次——从文件读写到网络传输,从数据库到Web容器——都做好编码的适配和转换工作。只有这样,才能有效地避免和解决乱码问题,保证程序的...

    Java编程乱码问题

    总之,Java编程中的乱码问题主要是由于Unicode编码与系统默认编码的转换不当导致的,理解和掌握编码原理以及Java程序的生命周期中的编码转换过程,是解决这类问题的关键。开发者应当注意在各个阶段保持编码的一致性...

    怎么解决JSP页面中文问题20100901

    在Web开发中,尤其是使用Java Server Pages (JSP)进行开发时,处理中文字符常常会遇到乱码问题。本文将详细探讨如何有效地解决JSP页面中的中文问题,确保用户界面能够正确地显示中文内容。 #### JSP页面中文问题的...

    学习常用知识(java,sql,oracle,ejb,ssh,struts,xml,监听器,拦截器,过滤器)

    过滤器(Filters)可以对HTTP请求和响应进行预处理和后处理,如字符编码转换、权限检查等。 这些技术的综合运用能够构建出高效、可维护的企业级Web应用。对于初学者来说,逐步学习和实践这些知识,将有助于提升技能...

    QQ-java面试问题集锦.doc

    编码转换可以通过`new String(bytes, "GB2312").getBytes("ISO-8859-1")`这样的方式实现,将源字符串的编码转换为目标编码。 【数据库访问】 访问数据库通常涉及JDBC,`Statement`用于执行静态SQL,而`...

    华为与IBM等公司--JAVA面试题大全.doc

    编码转换可通过Charset类进行,例如将GB2312编码的字符串转换为ISO-8859-1编码。 访问数据库通常使用JDBC,Statement用于执行静态SQL,PreparedStatement支持预编译的SQL,能防止SQL注入,更安全。 【JSP&Servlet...

    Java面试题大全.pdf

    21. Java中的字符编码处理 - 字符串的编码转换处理,例如将字符串从ISO-8859-1编码转为GBK编码。 这些知识点构成了Java程序员面试时通常会遇到的问题范畴,涵盖了从基础到高级主题的广泛内容。掌握这些知识点对于...

    JAVA面试常见问题大全及解答.docx

    - 使用Charset类进行编码转换,如new String(byte[], charset)。 7. **数据库访问**: - Statement用于执行静态SQL,PreparedStatement用于预编译和参数化SQL,更安全且性能更好。 8. **JSP&Servlet**: - JSP...

    java 面试题

    在Java中,编码转换可以使用`InputStreamReader`和`OutputStreamWriter`类,它们允许指定编码格式。例如,将GB2312编码的字符串转换为ISO-8859-1编码的字符串,可以通过读取源编码的字符串,然后以目标编码写入新...

    JAVA面试题集整理

    - **问题**:如何将一个字符串从GB2312编码转换为ISO-8859-1编码? - **解释**:可以通过 `new String(bytes, charsetName)` 构造函数实现编码的转换。例如,先将GB2312编码的字符串转换为字节数组,然后再使用ISO...

Global site tag (gtag.js) - Google Analytics