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

import java.util.HashMap;
import java.util.Map;
/**
 * 创建日期: 2014-04-18 10:36:25
 * 作者: 黄飞
 * mail:[email protected] [email protected]
 * ©版权归作者所有
 * */
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<Integer, String> entry : strUtil.map.entrySet()){
			returnBuffer.insert(entry.getKey() , entry.getValue() ) ;
		}

		return returnBuffer.toString() ;
	}
}

class StringUtil{
	public String chinese ; 

	public Map<Integer , String> map = new HashMap<Integer, String>();
}

java GBK字符转换成为UTF-8编码字符,布布扣,bubuko.com

时间: 2024-08-07 08:22:50

java GBK字符转换成为UTF-8编码字符的相关文章

常用的Java字符转换工具类

该类里包含了Java中常用的字符串处理方法,如日期处理.金额转换... ----------------------------------------------------------------------------------------- import java.math.BigDecimal;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.Calendar;import jav

java中字符流的知识点---IO学习笔记(三)

字符流: 文本和文本文件的区别: 文本: java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码). 文件: 文件是byte byte byte-的数据序列. 文本文件: 文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果. 字符流(Reader,Writer) 操作的是文本文件.对于mp3,二进制文件是字节文件不适合用字符流读取,因为读取出来的是char,没有意义. 字符的处理,一次处理一个字符 字符的

分享万能java字符串编码转换工具类

代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ publ

JAVA中文字符编码问题

JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问 题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经掌握了对付这些字符乱码怪兽的诀窍.可当过段时间,换了个应用或换了个环境,又会碰到那讨厌的火 星文,并再次无所适从.于是下决心好好整理一下中文字符编码问题,以方便自己记忆,也为其他程序员兄弟们提供一份参考. 首先要了解JAVA处理字符的原理.JAVA使用UNICODE来存储字符数据,处理字符时通常有

JAVA字符串编码转换常用类

无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点:    1.当前流行的字符编码格式有:US-ASCII.ISO-8859-1.UTF-8.UTF-16BE.UTF-16LE.UTF-16.GBK.GB2312等,其中GBK.GB2312是专门处理中文编码的.    2.String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码

字符转换二进制码

编码.for 3.5 for循环的时候,循环的每一个元素是"字符" 字符-------->字节 utf-8     ----->3字节 gbk   --------->2字节 name = "小明" for i in name: bytes_list = bytes(i, encoding = "utf - 8")  #默认的每一个字节都是16进制 for b in bytes_list:                    

java语言字符编码问题

上代码 import java.io.*; public class EncodingDemo { public static void main(String[] args) { System.getProperties().list(System.out); try { FileWriter fw=new FileWriter("F:\\workspace\\JavaPrj\\test.txt"); fw.write("小超是个好孩子!"); fw.close(

理解Java中字符流与字节流的区别

1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流:能够向其写入一个字节序列的对象被称为输出流. 2. 字节流 Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据.Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输入字节流和输出字节流.InputStre

IO-04字节-字符转换流

掌握OutputStreamWriter和InputStreamReader的作用. 在整个IO包中,实际上就是分为字节流和字符流,但除了这两个流之外,还存在一组字节-字符流转换类. OutputStreamWriter:是Writer的子类,将输出的字符流编程字节流,既:将一个字符流的输出对象变成字节流输出对象. InputStreamReader:是Reader的子类,将输入的字节流变成字符流.既:将一个字节流的输入对象变成字符流的输入对象. 字符流转换成字节流的代码: package li