`

Javasrript 转unicode编码为utf-8

阅读更多

理论储备:


    UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。 在Unicode基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用2字节储存。而在辅助平面定义的字符,会以代理对(surrogate pair)的形式,以两个2字节的值来储存。

    unicode是一种编码方式,和ascii是同一个概念,而UTF是一种存储方式(格式)。

    在jvm内部,虚拟机管理数据(内存里)时,或者在进行对象序列化的时候,字符(串)都是以unicode编码方式的。
    但是在jvm中,字符(串)是以char 这种(存储)形式存放的,一个char占2个字节(例如可以定义char c='字'),就是“字”和“Z”是同样占2个字节的;而在对象序列化后,对象是进行UTF-8存储的,一个中文占3个字节,而英文、数字等只占一个字节,可以参看下面的链接。

    所以导致系列化以后的对象只占平时的大约一半的空间(当全是中文时占用相同的空间;全是英文时unicode占用的空间是UTF-8的2倍)。

        UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。 


function UU(AA,ZZ){
	if(null==ZZ || ZZ>=16) ZZ=0;
	if(null==AA || AA.length<4 || 0!=(3&AA.length)) return "";

	var KK="";
	for(var i=0; i<AA.length; i+=4)
	{
		var ___utf16=parseInt(AA.substr(i,4),16);
		var RR=0;
		switch(ZZ)
		{
			case 1:
				RR=0x0001;
				break;
			case 2:
				RR=0x0003;
				break;
			case 3:
				RR=0x0007;
				break;
			case 4:
				RR=0x000F;
				break;
			case 5:
				RR=0x001F;
				break;
			case 6:
				RR=0x003F;
				break;
			case 7:
				RR=0x007F;
				break;
			case 8:
				RR=0x00FF;
				break;
			case 9:
				RR=0x01FF;
				break;
			case 10:
				RR=0x03FF;
				break;
			case 11:
				RR=0x07FF;
				break;
			case 12:
				RR=0x0FFF;
				break;
			case 13:
				RR=0x1FFF;
				break;
			case 14:
				RR=0x3FFF;
				break;
			case 15:
				RR=0x7FFF;
				break;
			case 16:
				RR=0xFFFF;
				break;
		}
		var OO=(RR&___utf16);
		___utf16&=(~RR);
		___utf16>>=ZZ;
		___utf16|=(OO<<(16-ZZ));
		KK+=String.fromCharCode(___utf16);
		ZZ=(0x000F&___utf16);
	}
	return KK;
}
var result = UU("ce4e94d3d4d5042f0383c93ab32d0a00636baf442900e11a7ea60c8000c07c739182004201480150e0852759543327596cbda0ae003c100600400068720001940cc00f404004008c0348c80003d0a006064000d0032000e46e001980011000f8801000e4df1b00143100006e1c00ef8d80147800f0028030007c000a505700355b2f520060a44e94f8a7c1966751f5b26400382d600105f8540e235c523053e680134e2a513af8a7c1966751f5b262000078600413c0002700150200004302780026f004002900f46004023011800c00003000300030003e000f200400f823db84e53c00f002002100f8000ff002002313c00027001503e0000f100600400068720001940cc00f404004008c0348c80003d0a006064000d003600dc01b000cc0011000f8800c00d80d807be3001ef0028030007c000a50570034ad97520060a44e2deb248ba9f44ad97a169c7001e3f1364df8de2fc053f36b847ea60cc001c860007c7391824e2d2b8eb24eb32d085ace58890e28001753f44a2900",8);



JAVA CODE JAVASCRIPT转写版

	public static String UU(String AA, int ZZ) throws UnsupportedEncodingException {
		if (/* null==ZZ || */ZZ >= 16)
			ZZ = 0;
		if (null == AA || AA.length() < 4 || 0 != (3 & AA.length()))
			return "";
		System.out.println(AA);
		System.out.println(AA.substring(0, 4));
		String KK = "";
		for (int i = 0; i < AA.length(); i += 4) {
			int ___utf16 = Integer.parseInt(AA.substring(i, i + 4), 16);
//			System.out.println(___utf16);
			int RR = 0;
			switch (ZZ) {
			case 1:
				RR = 0x0001;
				break;
			case 2:
				RR = 0x0003;
				break;
			case 3:
				RR = 0x0007;
				break;
			case 4:
				RR = 0x000F;
				break;
			case 5:
				RR = 0x001F;
				break;
			case 6:
				RR = 0x003F;
				break;
			case 7:
				RR = 0x007F;
				break;
			case 8:
				RR = 0x00FF;
				break;
			case 9:
				RR = 0x01FF;
				break;
			case 10:
				RR = 0x03FF;
				break;
			case 11:
				RR = 0x07FF;
				break;
			case 12:
				RR = 0x0FFF;
				break;
			case 13:
				RR = 0x1FFF;
				break;
			case 14:
				RR = 0x3FFF;
				break;
			case 15:
				RR = 0x7FFF;
				break;
			case 16:
				RR = 0xFFFF;
				break;
			}
			int OO = (RR & ___utf16);
			___utf16 &= (~RR);
			___utf16 >>= ZZ;
			___utf16 |= (OO << (16 - ZZ));
//			System.out.println(___utf16);
			byte[] chara = new byte[2];
		    chara[0] = (byte)((___utf16 & 0x0000ff00) >> 8);
		    chara[1] = (byte)(___utf16 & 0x000000ff);
//			if(Integer.toHexString(___utf16).length() == 2){
//				KK+="00" + Integer.toHexString(___utf16);
//			}else{
//			KK+=Integer.toHexString(___utf16);
//			}
		    KK += new String(chara, "UTF16");
			ZZ = (0x000F & ___utf16);
		}
		return KK;
	}
分享到:
评论

相关推荐

    设置myeclipse新建jsp文件默认编码为UTF-8

    ### 设置MyEclipse新建JSP文件默认编码为UTF-8 #### 一、引言 在Web开发过程中,中文字符的正确显示对于用户体验至关重要。在使用MyEclipse进行Java Web开发时,可能会遇到中文乱码问题,这主要是由于文件编码设置...

    JS实现unicode和UTF-8之间的互相转换互转

    这里提到的短信网关可能需要将UTF-8编码的文本转换为Unicode编码,以便于短信服务能够正确处理。相反,当接收到Unicode编码的短信时,需要将其转换回UTF-8,以便在PC端软件中以人类可读的形式显示。 总结来说,...

    js gb2312和utf-8互转

    根据提供的文件信息,本文将详细解释如何在JavaScript中实现GB2312编码与UTF-8编码之间的相互转换。此技术对于处理不同编码格式的文本数据尤为重要,尤其是在Web开发领域中,经常需要处理多种字符集的数据。 ### GB...

    HTML中unicode字符串转UTF-8

    Unicode编码可以采用不同的字节序列来表示,其中UTF-8是最常见的一种。 UTF-8是Unicode的变种之一,它是一种可变长度的字节编码方式。在UTF-8编码中,每个Unicode字符可能由1到4个字节表示,根据码点的大小决定。...

    批量utf文件转utf8-bom

    "批量utf文件转utf8-bom"这个主题指的是将一批以UTF编码的文件转换为带有BOM(Byte Order Mark)的UTF-8编码。BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。...

    UTF-8 编码转换工具

    - **解码**:解码则是将UTF-8字节序列还原为Unicode码点,从而得到原始字符。这个过程需要正确识别字节序列的起始和结束,以及根据字节的最高位判断字符的长度。 3. **网页版UTF-8编码转换工具** 网页版的UTF-8...

    通过javascript进行UTF-8编码的实现方法

    由于JavaScript的字符串在内部是以Unicode编码形式存储的,我们需要通过特定的方法将其转换为UTF-8格式。在JavaScript中,可以通过String对象的charCodeAt方法获取字符的Unicode码值。因为英文字符和英文字符的...

    百度编辑器asp版UTF-8编码

    百度编辑器ASP版UTF-8编码是一个用于网页内容编辑的工具,它专为ASP(Active Server Pages)开发环境设计,并采用UTF-8编码标准。UTF-8是一种广泛使用的多字节字符编码,能够支持全球大部分语言,包括中文,使得...

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

    UTF-8是一种广泛使用的Unicode字符编码标准,它能够表示几乎所有的世界语言字符。在处理文本文件时,尤其是在跨平台或者需要兼容不同系统的情况下,将文本文件转换为UTF-8编码格式是常见的需求。以下是一个详细的...

    用javascript实现gb2312转utf-8的脚本

    用javascript实现gb2312转utf-8的脚本 本文讲解如何使用javascript实现gb2312编码到utf-8编码的转换。gb2312是中国国家标准的汉字编码字符集,共分两级,第一级为常用字,有3755字,第二级为次常用字,有3008字。...

    java jsp解决utf-8乱码.zip

    UTF-8是一种广泛使用的Unicode字符编码方案,它可以支持几乎所有的字符集,包括中文、日文和韩文。然而,在处理包含这些非ASCII字符的JSP文件时,如果编码设置不正确,就可能导致乱码。 首先,我们来分析一下乱码...

    utf-8文件非常好用

    许多编程语言如Python、Java、JavaScript都内置了对UTF-8的支持,可以方便地进行字符串的编码、解码、查找、替换等操作。同时,由于UTF-8的广泛使用,开发者在处理来自不同来源的数据时,很少会遇到编码不匹配的问题...

    zh-cn-utf8

    而UTF-8是Unicode的一种实现方式,它是一种变长的字符编码,可以表示Unicode字符集中的每一个字符。在PHP环境中,设置正确的字符编码(如UTF-8)至关重要,因为它影响到程序处理中文字符的能力,例如网页显示、...

    ewebeditor在线编辑器官方2.8修改utf-8

    将eWebEditor修改为UTF-8编码可能涉及到对源代码的调整,确保所有字符都能正确地以UTF-8格式存储和处理。这通常包括但不限于修改数据库连接字符串、设置页面头的charset属性、处理文件上传时的编码问题以及修正任何...

    一个文本转UTF-8的简单工具

    标题中的“一个文本转UTF-8的简单工具”指的是一个专为文本文件设计的小型应用程序,它的主要功能是将文本文件的编码格式转换为UTF-8。UTF-8是一种广泛使用的字符编码标准,能支持世界上几乎所有的语言文字,包括...

    ewebeditor_utf-8.rar

    2. **转换工具**:使用文本编辑器(如Notepad++,Sublime Text等)或专门的编码转换工具将所有相关文件(包括HTML、JavaScript、CSS等)的编码转换为UTF-8。 3. **配置修改**:修改编辑器的配置文件,确保其设置为...

    HTML1114 (HTTP 标头)的代码页 gb2312 覆盖(META 标记)的冲突的代码页 utf-8

    在这种情况下,由于HTTP响应头中的编码被设置为gb2312,而页面中的`&lt;meta&gt;`标签则声明为utf-8,这导致了编码冲突,使得IE11无法正确解析和显示页面内容。 #### 三、解决方案 **解决步骤** 1. **检查HTTP响应头**:...

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

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

    Web开发关于UTF-8的问题总结.docx

    - MySQL数据库应设置为使用UTF-8通用多八位字节无边界排序(utf8mb4)编码,以支持所有Unicode字符,包括表情符号等特殊字符。 - 创建数据库和表时,需指定字符集为utf8mb4,例如: ```sql CREATE DATABASE db_...

    utf-8解码小程序

    UTF-8是一种可变长度的Unicode字符编码方式,它能兼容ASCII并支持世界上几乎所有的字符集。在Web开发中,UTF-8是最常用的字符编码之一,因为它可以高效地存储和传输多语言文本。 ### 2. URL编码与解码 URL编码(也...

Global site tag (gtag.js) - Google Analytics