`
wingware
  • 浏览: 144556 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java unicode to utf-8

阅读更多
package test.wingware;

public class UnicodeToUTF8 {

	private static final int MASKBITS = 0x3F;
	private static final int MASKBYTE = 0x80;
	private static final int MASK2BYTES = 0xC0;
	private static final int MASK3BYTES = 0xE0;

	// private static final int MASK4BYTES = 0xF0;
	// private static final int MASK5BYTES = 0xF8;
	// private static final int MASK6BYTES = 0xFC;
	/** */
	/**
	 * @功能: 将UNICODE(UTF-16LE)编码转成UTF-8编码
	 * @参数: byte[] b 源字节数组
	 * @返回值: byte[] b 转为UTF-8编码后的数组
	 * @作者: imuse
	 */
	public static byte[] UNICODE_TO_UTF8(byte[] b) {
		int i = 0;
		int j = 0;
		byte[] utf8Byte = new byte[b.length * 2];
		while (i < b.length) {
			byte[] bUTF = new byte[1];
			int nCode = (b[i] & 0xFF) | ((b[i + 1] & 0xFF) << 8);
			if (nCode < 0x80) {
				bUTF = new byte[1];
				bUTF[0] = (byte) nCode;
			}
			// 110xxxxx 10xxxxxx
			else if (nCode < 0x800) {
				bUTF = new byte[2];
				bUTF[0] = (byte) (MASK2BYTES | nCode >> 6);
				bUTF[1] = (byte) (MASKBYTE | nCode & MASKBITS);
			}
			// 1110xxxx 10xxxxxx 10xxxxxx
			else if (nCode < 0x10000) {
				bUTF = new byte[3];
				bUTF[0] = (byte) (MASK3BYTES | nCode >> 12);
				bUTF[1] = (byte) (MASKBYTE | nCode >> 6 & MASKBITS);
				bUTF[2] = (byte) (MASKBYTE | nCode & MASKBITS);
			}
			for (int k = 0; k < bUTF.length; k++) {
				utf8Byte[j++] = bUTF[k];
			}
			i += 2;
		}
		b = new byte[j];
		System.arraycopy(utf8Byte, 0, b, 0, j);
		return b;
	}

	/** */
	/**
	 * @功能: 将一个长度为2 byte数组转为short
	 * @参数: byte[] bytesShort要转的字节数组
	 * @返回值: short sRet 转后的short值
	 */
	public static short bytesToShort(byte[] bytesShort) {
		short sRet = 0;
		sRet += (bytesShort[0] & 0xFF) << 8;
		sRet += bytesShort[1] & 0xFF;
		return sRet;
	}

	/** */
	/**
	 * @功能: 将一个short值转为byte数组
	 * @参数: short sNum 要转的short值
	 * @返回值: byte[] bytesRet 转后的byte数组
	 */
	public static byte[] shortToBytes(short sNum) {
		byte[] bytesRet = new byte[2];
		bytesRet[0] = (byte) ((sNum >> 8) & 0xFF);
		bytesRet[1] = (byte) (sNum & 0xFF);
		return bytesRet;
	}

	/** */
	/**
	 * @功能: 将一个长度为4 byte数组转为int
	 * @参数: byte[] bNum要转的字节数组
	 * @返回值: int retInt 转后的int值
	 */
	public static int bytesToInt(byte[] bNum) {
		int retInt = 0;
		retInt = ((bNum[0] & 0xFF) << 24);
		retInt += (bNum[1] & 0xFF) << 16;
		retInt += (bNum[2] & 0xFF) << 8;
		retInt += bNum[3] & 0xFF;
		return retInt;
	}

	/** */
	/**
	 * @功能: 将一个int值转为byte数组
	 * @参数: int nNum 要转的int值
	 * @返回值: byte[] bytesRet 转后的byte数组
	 */
	public static byte[] intToBytes(int nNum) {
		byte[] bytesRet = new byte[4];
		bytesRet[0] = (byte) ((nNum >> 24) & 0xFF);
		bytesRet[1] = (byte) ((nNum >> 16) & 0xFF);
		bytesRet[2] = (byte) ((nNum >> 8) & 0xFF);
		bytesRet[3] = (byte) (nNum & 0xFF);
		return bytesRet;
	}

}
分享到:
评论
2 楼 ap0406708 2012-08-08  
ap0406708 写道
有个bug

Sorry,我错了。完美无bug~~~thx your code.
1 楼 ap0406708 2012-08-08  
有个bug

相关推荐

    Java 程序转码(UTF-8)

    ### Java程序转码(UTF-8):详细解析与实现 #### 一、引言 在处理文本数据时,字符编码是一项重要的技术基础。不同系统、不同语言环境下的字符编码可能不一致,这就需要进行字符编码转换以确保数据正确显示和处理...

    UTF-8 UNICODE GBK 相互转换C源码

    1. UTF-8 to UNICODE:UTF-8编码的字符串需要解码为UNICODE,首先解析每个字节序列以确定字符的长度,然后根据字节顺序转换成16位的UNICODE值。 2. UNICODE to UTF-8:相反,我们需要将每个UNICODE字符转换为相应的...

    Delphi中UTF-8,Unicode格式转换

    delphi7调用delphi2009生成的dll文件会出现乱码问题。是unicode的原因 终于找到了UTF-8、Unicode格式转换函数

    GBK文件夹转化UTF-8 支持文件名

    本文将深入探讨如何使用Java工具将GBK编码的文件夹批量转换为UTF-8编码,同时支持文件名的转换。 首先,GBK是中国大陆广泛使用的汉字编码标准,它兼容GB2312,能够表示大部分中文字符。然而,GBK不支持Unicode,这...

    eclispe GBK转UTF-8乱码解决

    UTF-8则是一种变长的Unicode编码方式,可以表示世界上几乎所有的字符集,包括GBK中的所有字符。在Eclipse中,如果你的源代码或资源文件是GBK编码,而Eclipse的工作空间设置为UTF-8,就可能出现乱码。 解决Eclipse中...

    asp_hmac_sha256加密支持中文utf-8编码

    UTF-8是目前最常用的Unicode编码方式,能够准确无误地表示各种语言字符,包括中文。确保在不同平台和语言之间进行数据交换时,中文字符的处理一致性。 总之,ASP HMAC-SHA256加密方案为ASP开发者提供了一种安全的、...

    db2驱动包utf-8 GBK 都支持

    UTF-8是一种广泛使用的Unicode编码,几乎支持全球所有语言的字符,包括中文。在处理多语言环境或者需要国际化的应用时,UTF-8是首选的编码方式,因为它能确保数据的一致性和兼容性。 GBK是针对中文的一种扩展ASCII...

    完整版如何将文本转换为UTF-8码 .e.rar

    这个"完整版如何将文本转换为UTF-8码 .e.rar"压缩包文件很可能包含了一个详细的教程或工具,教你如何将文本文件从其他编码格式转换为UTF-8编码。 首先,我们需要理解什么是UTF-8。UTF,全称为Unicode ...

    字符编码转换,utf16 utf8 ascii unicode

    本文将深入探讨四个关键的字符编码标准:UTF-16、UTF-8、ASCII和Unicode,以及它们之间的转换方法。 首先,Unicode是一个字符集,包含了世界上几乎所有的文字系统,为每个字符分配了一个唯一的数字,称为码点。它...

    URL编码,Gb2312页面提交到Utf-8页面

    2. **Unicode到UTF-8的转换**:接下来将Unicode编码的字符串转换为UTF-8编码,以便在网络上传输。 3. **URL编码**:最后对UTF-8编码后的字符串进行URL编码,确保其可以在URL中安全传输。 #### 五、具体实现 下面...

    Python-convert2utf将目录下的全部源文件转成UTF8编码

    这段代码会递归遍历指定的`directory`,找到所有后缀为`.txt`, `.py`, `.java`, `.js`, `.html`的文件,读取它们的内容,假设它们是GBK编码,然后解码为Unicode,再编码为UTF-8并写回文件。同时,`utf-8-sig`编码器...

    免费且超小的unicode编码转换软件(toUnicode)

    总的来说,这个名为toUnicode的小型软件提供了一个方便的界面,让用户能够轻松地将文本转换为Unicode编码的不同形式,特别是UTF-16LE、UTF-16BE和UTF-8。对于开发者、文本编辑者或需要处理多种语言文本的用户来说,...

    UNICODE_2.00_编码转换.rar

    本文将深入探讨“UNICODE_2.00_编码转换.rar”文件所涉及的编码概念,包括Text、ANSI、Unicode、UCS-2、UTF-8以及UTF-7,并解释如何进行汉字转UCS-2格式的转换。 1. **Text编码**:在计算机早期,"Text"通常指基于...

    JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)_.docx

    JavaScript 使用 Unicode 编码来表示字符串,而 Unicode 编码可以是 utf-16 或 utf-8 等多种编码方式。 在 JavaScript 中,我们可以使用 encodeURIComponent() 函数来实现 Base64 编码,但是这只能对 ASCII 字符串...

    java获取文件编码(判断有无BOM)

    例如,UTF-8的BOM是三个字节(0xEF, 0xBB, 0xBF),而UTF-16LE和UTF-16BE的BOM分别是两个字节(0xFF, 0xFE)和(0xFE, 0xFF)。虽然UTF-8的BOM在很多情况下不是必须的,但有些软件可能会在创建文件时默认添加。 在...

    android POST数据遇到的UTF-8编码(乱码)问题解决办法

    在示例中,字符“·”(MIDDLE DOT,Unicode U+00B7)在UTF-8编码下应为"C2 B7",但在ISO-8559-1编码下仅表示为"B7"。由于HTTP请求默认使用ISO-8859-1编码,当客户端未明确指定编码时,async-http库会按照此编码格式...

    java utf8 to gb2312

    ### Java UTF-8 转 GB2312 的实现方法及原理 #### 一、引言 在处理中文字符编码转换时,我们经常会遇到不同的编码格式,如 UTF-8 和 GB2312。这两种编码方式在中国互联网环境中非常常见。UTF-8 是一种可变长度的...

    乱码 编码方式解决 gbk ISO8859-1 utf8 编码

    3. **UTF-8编码**:UTF-8是一种可变长度的Unicode编码方式,支持世界上几乎所有语言的文字,包括中文。UTF-8的最大特点是兼容ASCII,且对于英文字符只需要一个字节,因此在网络传输中非常高效。 #### 二、乱码问题...

    Convert_To_UTF8.rar_ConvertToUTF8_ConvertToUTF8.zip_convert utf8

    GBK编码是中国大陆广泛使用的汉字编码标准,而UTF-8则是国际上最普遍的Unicode编码格式。本主题聚焦于如何将GBK编码的文本转换为UTF-8编码,特别关注Java编程语言中的实现方法。 GBK编码是GB2312编码的扩展,包含了...

Global site tag (gtag.js) - Google Analytics