`
com1com4
  • 浏览: 162092 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

GBK编码字符串转UTF-8

 
阅读更多

由于项目需要, 需要把GBK编码的字符串转成UTF-8编码, 网上随手搜了一下, 找到些样例代码, 可以用, 不过很恶心, 竟然把字符数值转成二进制的字符串形式进行操作, 于是自己动手根据编码规则用位操作写了一个...也没几行...有时还真不能太懒...

import java.io.UnsupportedEncodingException;

/**
 * @author GChan
 *
 */
public class CharacterEncodeConverter {

	/**
	 * The main method.
	 * 
	 * @param args
	 *            the arguments
	 */
	public static void main(String[] args) {

		try {
			CharacterEncodeConverter convert = new CharacterEncodeConverter();
			byte[] src = new byte[5];
			src[0] = (byte) 0xD6;
			src[1] = (byte) 0xD0;
			src[2] = (byte) 0x32;
			src[3] = (byte) 0xCE;
			src[4] = (byte) 0xC4;

			byte[] fullByte = convert.gbk2utf8byte(new String(src, "GBK"));
			String fullStr = new String(fullByte, "UTF-8");
			System.out.println("string from GBK to UTF-8 byte:  " + fullStr);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * gbk2utf8byte.
	 * 
	 * @param chinese
	 *            the chinese
	 * 
	 * @return the byte[]
	 */
	public byte[] gbk2utf8byte(String chinese) {

		// Step 1: 得到GBK编码下的字符数组,一个中文字符对应这里的一个c[i]
		char c[] = chinese.toCharArray();

		// Step 2: UTF-8使用3个字节存放一个中文字符,假设全部为中文,则最大长度为字符数年的3倍
		byte[] fullByte = new byte[3 * c.length];

		// Step 3: 循环将字符的编码转换成UTF-8编码
		int counter = 0;
		for (int i = 0; i < c.length; i++) {
			// Step 3-1:将字符的ASCII编码转换成数值
			int m = (int) c[i];
			
			// ASCII 直接下一字符
			if (m <= 127) {
				fullByte[counter++] = (byte) m;
				continue;
			}
			
			
			// 编码格式:1110[xxxx] 10[xxxxxx] 10[xxxxxx]
			
			// 1110 和前四位构成第一字节
			int b0 = ((m & 0xF000) >>> 12) | 0xE0;
			// 10 和中间六位构成第二字节
			int b1 = ((m & 0x0FC0) >>> 6) | 0x80;
			// 10 和最后六位构成第三字节
			int b2 = (m & 0x003F) | 0x80;

			fullByte[counter++] = (byte) b0;
			fullByte[counter++] = (byte) b1;
			fullByte[counter++] = (byte) b2;

			// 继续解析下一个中文字符
		}
		
		// 根据实际编码长度生成新数组返回
		byte[] result = new byte[counter];
		System.arraycopy(fullByte, 0, result, 0, counter);
		return result;
	}

	
	/**
	 * gbk2utf8.
	 * @param chinese
	 * @return
	 */
	public String gbk2utf8(String chinese) {
		String result = null;
		try {
			result = new String(gbk2utf8byte(chinese), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return result;
	}
}
 
分享到:
评论

相关推荐

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    UTF-8toGBK_labview编码gbk_LabVIEWUTF-8_utf-8toGbk_

    在LabVIEW编程环境中,"UTF-8toGBK.vi"这个程序可能是一个用户自定义的VI(Virtual Instrument),用于将UTF-8编码的字符串转换为GBK编码。LabVIEW作为一个图形化编程语言,提供了丰富的字符串处理函数,其中包括了...

    C#写的 GBK GB2312 UTF-8转换

    在这个例子中,`Encoding.GetEncoding("GBK")`获取了GBK编码器,`GetBytes()`方法将GBK编码的字符串转换为字节数组,然后`Encoding.UTF8.GetString()`将这个字节数组还原为UTF-8编码的字符串。 对于文件的编码转换...

    c语言gbk、utf8转换编码表及函数

    - 反之,从UTF-8转GBK则需要解析UTF-8编码的字节序列,找到对应的Unicode码点,再转换成GBK编码。 5. **转换函数示例** - `gbk_to_utf8()`函数可能接收GBK编码的字符串作为输入,返回转换后的UTF-8编码字符串。 ...

    UTF-8toGBK_labview编码gbk_LabVIEWUTF-8_utf-8toGbk_源码.zip

    转换过程包括读取UTF-8编码的字符串,然后根据GBK编码规则重新排列字节,以生成GBK编码的字符串。这个过程中需要注意字节顺序和多字节字符的处理,以确保转换的准确性。 LabVIEW编程环境中,可以创建自定义VI(虚拟...

    GBK编码转换和UTF-8编码转换模块源码

    GBK编码和UTF-8编码是两种广泛使用的字符编码标准,它们各有特点,但不兼容,因此在不同环境下进行数据交换时,需要进行相应的转换。 GBK编码是中国大陆广泛采用的一种汉字编码标准,它是GB2312的扩展,包含了更多...

    判断字符串编码是utf-8还是gb2312

    判断字符串编码是utf-8还是gb2312 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要使用PHP通过对字符的ASCII码值进行判断,从而...

    pb12 gb转utf-8

    转换“pb12 gb转utf-8”意味着你可能有一个使用PowerBuilder 12编写的程序或数据库,其中的数据是以GBK编码存储的,现在需要将这些数据转换为UTF-8编码以便在更广泛的环境中使用或与其他系统进行兼容。 这个过程...

    DELPHI 10.3编码转换 iso-8859-1转GBK,GBK转iso-8859-1

    例如,如果二维码生成器默认使用`UTF-8`编码,而输入的数据是`ISO-8859-1`或`GBK`编码,解码时就会出现错误。因此,正确地进行编码转换至关重要。 解决乱码问题的方法是确保在生成二维码前将数据转换为统一的编码...

    GB2312编码和UTF-8互转(c语言实现)

    GB2312编码与utf-8编码的字符串的转换,主要使用windows api函数MultiByteToWideChar和WideCharToMultiByte,代码简洁,经测试可用

    STM32 MDK utf8 gbk编码转换

    这些函数可能包括将GBK编码的字符串转换为UTF-8,以及将UTF-8编码的字符串转换为GBK。 例如,一个可能的`gbk_to_utf8`函数会遍历GBK编码的输入字符串,根据GBK编码规则将其转换为对应的Unicode码点,然后根据UTF-8...

    GBK 与 UTF-8 间编码转换

    对于GBK到UTF-8的转换,首先需要将GBK编码的每个双字节视为一个独立的字符,然后查找对应的Unicode码点,最后按照UTF-8的规则将其转换成1至3个字节的序列。相反,从UTF-8到GBK的转换则需要识别出UTF-8编码的字节序列...

    c gbk和 utf-8 转换

    - GBK编码中,每个字符由两个字节组成,我们可以遍历输入的GBK字符串,每次取两个字节作为GBK编码值。 - 使用GBK编码值查表,找到对应的Unicode码点。这个过程需要预先创建一个GBK到Unicode的映射表,这个表可以...

    utf-8 ansi 字符互转 工具

    例如“utf-8 ansi 字符互转 工具”就是这样一个软件,它能方便地帮助用户将文件或文本内容在UTF-8和ANSI编码之间进行转换。使用这类工具,用户通常只需选择输入文件、指定输出格式,然后点击转换按钮即可完成操作。 ...

    文件编码转换,GBK和UTF-8双向互换,批处理文化方法

    文件包含:gbk2utf-8.bat、utf-82gbk.bat、iconv.exe及使用说明.txt四个文件 使用说明:1把要转换的所有.h和.c文件拷入该目录下,双击相应的bat文件即可。 2转换结果会保存在utf-8Res或gbkRes目录下。 3如果转换除...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    例如,从GBK转到UTF-8,只需将GBK的宽字符转换为对应的UTF-8字节序列。 4. **编码**:将Unicode字符数组编码为目标编码。对于GBK,同样需要借助外部库或API;对于UTF-8,你可以手动构建字节序列,遵循UTF-8的规则。...

    GBK与UTF-8转码(C++)

    本文将详细介绍如何在Microsoft Foundation Classes (MFC)环境下实现GBK与UTF-8之间的编码转换。该技术适用于那些需要处理不同字符集数据的应用程序开发场景,特别是在早期Windows系统中广泛使用的MFC框架下进行编码...

    如何使用Java代码将GBK编码格式的工程转换为UTF-8编码格式的工程.zip

    在处理包含中文字符的Java工程时,有时需要将GBK编码的工程转换为UTF-8编码,以确保在不同系统或工具中的正常显示和处理。本教程将详细讲解如何使用Java代码来完成这个转换过程。 首先,我们需要了解GBK和UTF-8编码...

    UTF-8转GBK C语言 Linux

    在`Utf8ToGbk.c`中,可能包含的函数有`utf8_to_gbk()`,这是一个接受UTF-8字符串作为输入,返回GBK编码字符串的函数。其内部逻辑可能包括: 1. 遍历UTF-8字符串,识别每个字符的字节数。 2. 根据UTF-8的编码规则,...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    例如,将一个UTF-8编码的字符串转换为Unicode编码的字符串: ```java String utf8Str = "中文"; String unicodeStr = new String(utf8Str.getBytes("UTF-8"), "UTF-8"); ``` #### 6. 示例分析 - **从GBK到ISO-...

Global site tag (gtag.js) - Google Analytics