java实现utf-8与GB2312编码的转换

Java 则采用了平台无关的 UNICODE,Java 从一个 byte 流中读取一个字符串时,将把平台 相关的 byte 转变为平台无关的 Unicode 字符串。在输出时 Java 将把 Unicode 字符串转变为平台相关的 byte 流,如果某个 Unicode 字 符在某个平台上不存在,将会输出一个 ‘?’

GB2312 编码中一个汉字是 16 位的,而 UTF8 中一个汉字却是 24 位的。如果实现 UTF-8gb2312 编码的相互转换呢?今天整理了一番,给出两者进行转换的代码。

//UTF-8 编码的字符串转换为 GB2312 编码格式:

public static String utf8Togb2312(String str){

        StringBuffer sb = new StringBuffer();

        for ( int i=0; i<str.length(); i++) {

            char c = str.charAt(i);

            switch (c) {

               case ‘+’ :

                   sb.append( ’ ‘ );

               break ;

               case ‘%’ :

                   try {

                        sb.append(( char )Integer.parseInt (

                        str.substring(i+1,i+3),16));

                   }

                   catch (NumberFormatException e) {

                       throw new IllegalArgumentException();

                  }

                  i += 2;

                  break ;

               default :

                  sb.append(c);

                  break ;

             }

        }

        String result = sb.toString();

        String res= null ;

        try {

             byte [] inputBytes = result.getBytes( “8859_1” );

            res= new String(inputBytes, “UTF-8” );

        }

        catch (Exception e){}

        return res;

  }

// 将 GB2312 编码格式的字符串转换为 UTF-8 格式的字符串:

public static String gb2312ToUtf8(String str) {

        String urlEncode = “” ;

        try {

            urlEncode = URLEncoder.encode (str, “UTF-8” );

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        return urlEncode;

}

当然各种编码之前都可以进行相互的转换,本文只是将最常用的两种字符进行了转换,起到抛砖引玉的作用。后期如果有额外的需求,再对其它字符的转换进行介绍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,将UTF-8编码转换GB2312编码可以使用Java的标准库中的一些类和方法来完成。 首先,我们需要将UTF-8编码的字符串转换为字节数组。可以使用Java内置的String类的getBytes方法,并传入UTF-8作为参数,如下所示: byte[] utf8Bytes = utf8String.getBytes("UTF-8"); 接下来,我们可以使用Java提供的Charset类来获取GB2312编码字符集对象。可以使用forName静态方法,传入"GB2312"作为参数,如下所示: Charset gb2312Charset = Charset.forName("GB2312"); 然后,我们可以使用CharsetEncoder类将UTF-8的字节数组编码GB2312编码的字节数组。可以使用Charset对象的newEncoder方法来获取CharsetEncoder对象,然后使用encode方法进行编码,如下所示: CharsetEncoder gb2312Encoder = gb2312Charset.newEncoder(); ByteBuffer gb2312Buffer = gb2312Encoder.encode(ByteBuffer.wrap(utf8Bytes)); 最后,我们可以将GB2312编码的字节数组转换为字符串。可以使用ByteBuffer类和CharsetDecoder类来完成这个转换。首先,使用Charset对象的newDecoder方法获取CharsetDecoder对象,然后使用decode方法进行解码,并将结果转换为字符串,如下所示: CharsetDecoder gb2312Decoder = gb2312Charset.newDecoder(); String gb2312String = gb2312Decoder.decode(gb2312Buffer).toString(); 最终,gb2312String字符串就是将UTF-8编码转换GB2312编码后的结果。 需要注意的是,UTF-8GB2312是不同的字符编码方式,转换过程中可能会有一些字符无法转换或产生乱码的情况,特别是当UTF-8编码中包含了GB2312无法表示的字符时。因此,在进行编码转换时,我们应该注意处理这些特殊情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值