java gbk转utf-8_java GBK字符转换成为UTF-8编码字符

这个Java程序演示了如何将GBK编码的字符串转换为UTF-8编码。主要方法`gbk2utf8`使用位操作将GBK字符转换为UTF-8字节,并通过`StringUtil`类处理半角字符。
摘要由CSDN通过智能技术生成

import java.util.HashMap;

import java.util.Map;

/**

* 创建日期: 2014-04-18 10:36:25

* 作者: 黄飞

* mail:huangfei8087@163.com 834865081@qq.com

* ©版权归作者全部

* */

public class ConverFromGBKToUTF8 {

public static void main(String[] args) {

try {

ConverFromGBKToUTF8 convert = new ConverFromGBKToUTF8();

String fullStr = convert.gbk2utf8("半角变拳脚,quanjiao ");

System.out.println( fullStr ) ;

} catch (Exception e) {

e.printStackTrace();

}

}

private StringUtil chinese(String chinese){

StringUtil util = new StringUtil();

char[]chars = chinese.toCharArray() ;

int index = 0 ;

StringBuffer buffer = new StringBuffer();

for(char c : chars){

String temp = String.valueOf(c) ;

if(temp.getBytes().length == 1){

util.map.put( index , temp ) ;

}else{

buffer.append( temp );

}

index++;

}

util.chinese = buffer.toString() ;

return util ;

}

public String gbk2utf8(String chenese) {

StringUtil strUtil = chinese( chenese ) ;

char c[] = strUtil.chinese.toCharArray( ) ;

byte[] fullByte = new byte[3 * c.length];

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

int m = (int) c[i];

String word = Integer.toBinaryString(m);

StringBuffer sb = new StringBuffer();

int len = 16 - word.length();

for (int j = 0; j < len; j++) {

sb.append("0");

}

sb.append(word);

sb.insert(0, "1110");

sb.insert(8, "10");

sb.insert(16, "10");

String s1 = sb.substring(0, 8);

String s2 = sb.substring(8, 16);

String s3 = sb.substring(16);

byte b0 = Integer.valueOf(s1, 2).byteValue();

byte b1 = Integer.valueOf(s2, 2).byteValue();

byte b2 = Integer.valueOf(s3, 2).byteValue();

byte[] bf = new byte[3];

bf[0] = b0;

fullByte[i * 3] = bf[0];

bf[1] = b1;

fullByte[i * 3 + 1] = bf[1];

bf[2] = b2;

fullByte[i * 3 + 2] = bf[2];

}

String reutrnStr = null ;

try {

reutrnStr = new String(fullByte, "UTF-8");

} catch (Exception e) {

}

StringBuffer returnBuffer = new StringBuffer( reutrnStr );

for(Map.Entry entry : strUtil.map.entrySet()){

returnBuffer.insert(entry.getKey() , entry.getValue() ) ;

}

return returnBuffer.toString() ;

}

}

class StringUtil{

public String chinese ;

public Map map = new HashMap();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值