现在项目中要把utf-8编码的数据转存到gbk编码的数据库中,请问哪位有现成的类给我一份,谢谢!
注意不是简单的new String(str.getBytes("utf-8"),"gbk")就能解决的。

解决方案 »

  1.   


      import java.io.UnsupportedEncodingException;/** *//**
     * 转换字符串的编码
     * @author joe
     *
     */public class ChangeCharset ...{
        /** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块      */
        public static final String US_ASCII = "US-ASCII";
        /** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1     */
        public static final String ISO_8859_1 = "ISO-8859-1";
        /** *//** 8 位 UCS 转换格式     */
        public static final String UTF_8 = "UTF-8";
        /** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序     */
        public static final String UTF_16BE = "UTF-16BE";
        /** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序     */
        public static final String UTF_16LE = "UTF-16LE";
        /** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识     */
        public static final String UTF_16 = "UTF-16";
        /** *//** 中文超大字符集     **/
        public static final String GBK = "GBK";
        
        public static final String GB2312 = "GB2312";
        
        /** *//** 将字符编码转换成US-ASCII码     */
        public String toASCII(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str, US_ASCII);
        }
        
        /** *//** 将字符编码转换成ISO-8859-1     */
        public String toISO_8859_1(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str, ISO_8859_1);
        }
        
        /** *//** 将字符编码转换成UTF-8     */
        public String toUTF_8(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str, UTF_8);
        }
        
        /** *//** 将字符编码转换成UTF-16BE     */
        public String toUTF_16BE(String str) throws UnsupportedEncodingException...{
            return this.changeCharset(str, UTF_16BE);
        }
        
        /** *//** 将字符编码转换成UTF-16LE     */
        public String toUTF_16LE(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str, UTF_16LE);
        }
        
        /** *//** 将字符编码转换成UTF-16     */
        public String toUTF_16(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str, UTF_16);
        }
        
        /** *//** 将字符编码转换成GBK     */
        public String toGBK(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str, GBK);
        }
        
        /** *//** 将字符编码转换成GB2312     */
        public String toGB2312(String str) throws UnsupportedEncodingException ...{
            return this.changeCharset(str,GB2312);
        }
        
        /** *//**
         * 字符串编码转换的实现方法
         * @param str    待转换的字符串
         * @param newCharset    目标编码
         */
        public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException ...{
            if(str != null) ...{
                //用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
                byte[] bs = str.getBytes();
                return new String(bs, newCharset);    //用新的字符编码生成字符串
            }
            return null;
        }
        
        /** *//**
         * 字符串编码转换的实现方法
         * @param str    待转换的字符串
         * @param oldCharset    源字符集
         * @param newCharset    目标字符集
         */
        public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException ...{
            if(str != null) ...{
                //用源字符编码解码字符串
                byte[] bs = str.getBytes(oldCharset);
                return new String(bs, newCharset);
            }
            return null;
        }
        
        public static void main(String[] args) throws UnsupportedEncodingException ...{
            ChangeCharset test = new ChangeCharset();
            String str = "This is a 中文的 String!";
            System.out.println("str:" + str);
            
            String gbk = test.toGBK(str);
            System.out.println("转换成GBK码:" + gbk);
            System.out.println();
            
            String ascii = test.toASCII(str);
            System.out.println("转换成US-ASCII:" + ascii);
            System.out.println();
            
            String iso88591 = test.toISO_8859_1(str);
            System.out.println("转换成ISO-8859-1码:" + iso88591);
            System.out.println();
            
            gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
            System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
            System.out.println();
            
            String utf8 = test.toUTF_8(str);
            System.out.println();
            System.out.println("转换成UTF-8码:" + utf8);
            String utf16be = test.toUTF_16BE(str);
            System.out.println("转换成UTF-16BE码:" + utf16be);
            gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
            System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
            System.out.println();
            
            String utf16le = test.toUTF_16LE(str);
            System.out.println("转换成UTF-16LE码:" + utf16le);
            gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
            System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
            System.out.println();
            
            String utf16 = test.toUTF_16(str);
            System.out.println("转换成UTF-16码:" + utf16);
            String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
            System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
        }}
      

  2.   

    你不可以把数据库也改为utf-8的编码吗?
      

  3.   

    lz不要把简单的问题复杂化了
    方法一:如果是数据库之间的数据,可以写JDBC的连接,把UTF-8数据导出来,再导入到GBK的数据库,
    方法二:直接写个DBlink,写个SQL就OK
    create table GBKTABLE as select * from UTF-8TABLER;
    insert into  GBKTABLE   select *  from UTF-8TABLER@dblinkName 
      

  4.   

    Java code  import java.io.UnsupportedEncodingException;/** *//**
     * 转换字符串的编码
     * @author joe
     *
     */public class ChangeCharset ...{
        /** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块……
    [/Quote]
      

  5.   

    byte[] tmp = str.tobyte("ISO-8859-1");
    String newStr = new String(tmp,"GBK");
      

  6.   

    一点数据代码都没有,让别人靠瞎蒙解决你的问题吗?
    所谓的编码,都是在字节级别上的。如果你的数据是String的,还号称utf-8,说明你的数据在获取的时候已经乱码了,或者你存储的时候使用了错误的数据格式。
    数据库的编码理论上是自动的,如果你使用String进行数据交流是可以无视这个编码的,至少字符串内容是正确解码过的字符串即可。如果不管用说明你其他的地方还有问题。
    编码方面没什么麻烦的算法,都是几行代码搞定,区别是你有知还是无知。所谓一锤子十万块就是如此。数据流动的每一个环节都有可能出现乱码,视情况各自不同,只有你清楚数据流动的每一个环节才能真正解决问题。连基本环境都不告诉,让别人发个类给你就觉得能用,完全是瞎蒙。
    就好像你说一句“我有病,求药”,别人发了你付大力丸,你吃了说“没用,还谁有药”。能治好才怪呢。
      

  7.   

    一直都是在utf-8和gbk之间相互倒腾,oracle的数据库,也没见有什么不好弄的地方顶#12,utf-8的数据库,你把数据导出来,只要没乱码,再往gbk里直接导进去就得了
      

  8.   

    查一查关于DBCP命令,还有没有解决方法