utf8 GB2312 互转

 private static int by2int(int   b) 
   { 
	   return  b & 0xff; 
   } 
   private static  String UTF82GB2312(byte buf[]) 
   { 
	   int len =  buf.length; 
	   StringBuffer sb  = new  StringBuffer(len/2); 
	   for(int i =0;i<len; i++) { 
		   if(by2int(buf[i]) <= 0x7F){ 
			   sb.append((char)buf[i]);
		   } 
		   else if(by2int(buf[i]) <=0xDF && by2int(buf[i])>=0xC0) 
           { 
	           int   bh   =   by2int(buf[i]   &   0x1F); 
	           int   bl   =   by2int(buf[++i]   &   0x3F); 
	           bl   =   by2int(bh   <<   6   |   bl); 
	           bh   =   by2int(bh   >>   2); 
	           int   c     =     bh <<8   |   bl; 
	           sb.append((char)c); 
           }else if(by2int(buf[i]) <=0xEF && by2int(buf[i])>=0xE0){ 
	           int   bh   =   by2int(buf[i]   &   0x0F); 
	           int   bl   =   by2int(buf[++i]   &   0x3F); 
	           int   bll   =   by2int(buf[++i]   &   0x3F); 
	           bh   =   by2int(bh   <<   4   |   bl>> 2); 
	           bl   =   by2int(bl   <<   6   |   bll); 
	           int   c     =     bh <<8   |   bl; 
	           //空格转换为半角 
	           if(c==58865){ 
                   c = 32; 
	           } 
               sb.append((char)c); 
            } 
       } 
       return   sb.toString(); 
   } 


public byte[] gbk2utf8(String chenese) {
       char c[] = chenese.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];

       }
       return fullByte;
   }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值