理论储备:
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 #### 一、引言 在Web开发过程中,中文字符的正确显示对于用户体验至关重要。在使用MyEclipse进行Java Web开发时,可能会遇到中文乱码问题,这主要是由于文件编码设置...
这里提到的短信网关可能需要将UTF-8编码的文本转换为Unicode编码,以便于短信服务能够正确处理。相反,当接收到Unicode编码的短信时,需要将其转换回UTF-8,以便在PC端软件中以人类可读的形式显示。 总结来说,...
根据提供的文件信息,本文将详细解释如何在JavaScript中实现GB2312编码与UTF-8编码之间的相互转换。此技术对于处理不同编码格式的文本数据尤为重要,尤其是在Web开发领域中,经常需要处理多种字符集的数据。 ### GB...
Unicode编码可以采用不同的字节序列来表示,其中UTF-8是最常见的一种。 UTF-8是Unicode的变种之一,它是一种可变长度的字节编码方式。在UTF-8编码中,每个Unicode字符可能由1到4个字节表示,根据码点的大小决定。...
"批量utf文件转utf8-bom"这个主题指的是将一批以UTF编码的文件转换为带有BOM(Byte Order Mark)的UTF-8编码。BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。...
- **解码**:解码则是将UTF-8字节序列还原为Unicode码点,从而得到原始字符。这个过程需要正确识别字节序列的起始和结束,以及根据字节的最高位判断字符的长度。 3. **网页版UTF-8编码转换工具** 网页版的UTF-8...
由于JavaScript的字符串在内部是以Unicode编码形式存储的,我们需要通过特定的方法将其转换为UTF-8格式。在JavaScript中,可以通过String对象的charCodeAt方法获取字符的Unicode码值。因为英文字符和英文字符的...
百度编辑器ASP版UTF-8编码是一个用于网页内容编辑的工具,它专为ASP(Active Server Pages)开发环境设计,并采用UTF-8编码标准。UTF-8是一种广泛使用的多字节字符编码,能够支持全球大部分语言,包括中文,使得...
UTF-8是一种广泛使用的Unicode字符编码标准,它能够表示几乎所有的世界语言字符。在处理文本文件时,尤其是在跨平台或者需要兼容不同系统的情况下,将文本文件转换为UTF-8编码格式是常见的需求。以下是一个详细的...
用javascript实现gb2312转utf-8的脚本 本文讲解如何使用javascript实现gb2312编码到utf-8编码的转换。gb2312是中国国家标准的汉字编码字符集,共分两级,第一级为常用字,有3755字,第二级为次常用字,有3008字。...
UTF-8是一种广泛使用的Unicode字符编码方案,它可以支持几乎所有的字符集,包括中文、日文和韩文。然而,在处理包含这些非ASCII字符的JSP文件时,如果编码设置不正确,就可能导致乱码。 首先,我们来分析一下乱码...
许多编程语言如Python、Java、JavaScript都内置了对UTF-8的支持,可以方便地进行字符串的编码、解码、查找、替换等操作。同时,由于UTF-8的广泛使用,开发者在处理来自不同来源的数据时,很少会遇到编码不匹配的问题...
而UTF-8是Unicode的一种实现方式,它是一种变长的字符编码,可以表示Unicode字符集中的每一个字符。在PHP环境中,设置正确的字符编码(如UTF-8)至关重要,因为它影响到程序处理中文字符的能力,例如网页显示、...
将eWebEditor修改为UTF-8编码可能涉及到对源代码的调整,确保所有字符都能正确地以UTF-8格式存储和处理。这通常包括但不限于修改数据库连接字符串、设置页面头的charset属性、处理文件上传时的编码问题以及修正任何...
标题中的“一个文本转UTF-8的简单工具”指的是一个专为文本文件设计的小型应用程序,它的主要功能是将文本文件的编码格式转换为UTF-8。UTF-8是一种广泛使用的字符编码标准,能支持世界上几乎所有的语言文字,包括...
2. **转换工具**:使用文本编辑器(如Notepad++,Sublime Text等)或专门的编码转换工具将所有相关文件(包括HTML、JavaScript、CSS等)的编码转换为UTF-8。 3. **配置修改**:修改编辑器的配置文件,确保其设置为...
在这种情况下,由于HTTP响应头中的编码被设置为gb2312,而页面中的`<meta>`标签则声明为utf-8,这导致了编码冲突,使得IE11无法正确解析和显示页面内容。 #### 三、解决方案 **解决步骤** 1. **检查HTTP响应头**:...
UTF-8是目前最常用的Unicode编码方式,能够准确无误地表示各种语言字符,包括中文。确保在不同平台和语言之间进行数据交换时,中文字符的处理一致性。 总之,ASP HMAC-SHA256加密方案为ASP开发者提供了一种安全的、...
- MySQL数据库应设置为使用UTF-8通用多八位字节无边界排序(utf8mb4)编码,以支持所有Unicode字符,包括表情符号等特殊字符。 - 创建数据库和表时,需指定字符集为utf8mb4,例如: ```sql CREATE DATABASE db_...
UTF-8是一种可变长度的Unicode字符编码方式,它能兼容ASCII并支持世界上几乎所有的字符集。在Web开发中,UTF-8是最常用的字符编码之一,因为它可以高效地存储和传输多语言文本。 ### 2. URL编码与解码 URL编码(也...