理论储备:
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;
}
分享到:
相关推荐
用javascript实现gb2312转utf-8的脚本 本文讲解如何使用javascript实现gb2312编码到utf-8编码的转换。gb2312是中国国家标准的汉字编码字符集,共分两级,第一级为常用字,有3755字,第二级为次常用字,有3008字。...
需要将PC送过来的UTF-8转换成UNICODE才能将内容通过短信发送出去,同样,接收到的短信为unicode编码,也许转换成UTF-8才能在PC端软件显示出来
2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 5 可以对任意的文本块进行操作,ALT键+鼠标 6 对括号{}〔〕()可以高亮配对...
打开txt文件,自动识别编码格式ansi,unicode,unicode-BE,utf8,utf8-BOM,并转换为unicode显示到edit
Unicode代码点查找是一个Unicode编码/解码转换器,用于将UTF-32 / UTF-16 / UTF-8代码点序列转换为以Angular和Typescript编写的文本,反之亦然。 实时应用程序-Unicode代码点查找 特征 自适应和渐进式网页设计 ...
javascript程序,都是使用Unicode编码的。 UTF-8 UTF-8(UTF8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。 它可以用来表示Unicode标准中的任何字
首先,程序使用encodeURIComponent函数将汉字转换为UTF-8编码,例如将“汉字”转换为“%E6%B1%89%E5%AD%97”。然后,使用decodeURIComponent函数将UTF-8编码转换回汉字。 此外,程序还提供了AnsiCode函数将汉字转换...
这个简单的小程式示范如何用javascript 读入、输出ANSI 与UTF-8 编码的档案。 Demo Demo page: Sample files: 使用方式Usage 选取输入的档案编码(ANSI, UTF-8) 选取输出的档案编码(UTF-8 with/without BOM) 选择...
例如发送一段二进制到服务器时,服务器规定该二进制内容的编码必须为UTF-8。这种情况下,我们必须就要通过程序将javascript的GB18030、Unicode字符串转为UTF-8编码的字符串。附件是GB18030包含的21004个汉字的GB...
所以特地弄了个Unicode编码版,UTF8的内容是可以完美转换为Unicode的,所以不担心字符无法显示造成困扰!目前只择取出取字节集,至于其他的懒得复制了,留给大家自行扩展当练手和熟悉易语言COM对象的规则!核心就是...
可以将javascript Unicode字符串编码为utf-8多个单字节字符。 可以通过unescape(encodeURIComponent(str))在JavaScript中实现相同的功能,但是这种方法在其他语言中可能很有用。 可以将utf-8编码的字符串解码回...
MD5 文件md5.js提供了md5() ,这是... 由于要检查unicode并可能将其转换为UTF-8,因此此函数比Joseph的原始函数慢,但将产生与在UTF-8编码的文本上执行的服务器端md5()函数相同的结果。 在有一个基本的性能测试。
个是就是把汉字和Unicode编码互转的javascript代码,也是从网上找到了,也许有人用得着!!
这是和的快速 ,可让您将JavaScript字符串编码和解码为UTF-8字节。 它之所以很快是因为它不支持UTF-8之外的任何编码(请注意,从TextDecoder ,只有TextDecoder支持其他编码)。 参见。用法通过您喜欢的软件包管理器...
修复utf8 根据,尽最大努力恢复丢失的拉丁Unicode字符的功能 还利用机会对传递的字符串进行,将任何替换为其对应的字形。 安装 $ npm install fix-utf8 如何 const fixUtf8 = require ( 'fix-utf8' ) fixUtf8 ( "L'...
想办法在JavaScript中判断在UTF-8下存储的String的字节数,在网上找到很多关于Unicode介绍的文档,最重要的是字符编码数值对应的存储长度
所以特地弄了个Unicode编码版,UTF8的内容是可以完美转换为Unicode的,所以不担心字符无法显示造成困扰! 目前只择取出取字节集,至于其他的懒得复制了,留给大家自行扩展当练手和熟悉易语言COM对象的规则! 核心...
html编码 来自有关已知HTML字符编码标签的信息。 安装 该软件包仅适用于ESM:需要使用Node 12+才能使用它,并且必须将其import而不是require d。... 'unicode-1-1-utf-8' , '866' , 'cp866' , 'ibm866' ,
代码点编码为 UTF-8 (0xE280A6),请使用以下代码:- # U+2026unicode_utf8_encodeCodePoint 8230# Or, if using hexadecimalunicode_utf8_encodeCodePoint 0x2026输入要导入此模块,请将 git 子模块添加到您的存储...