js lzw中文压缩算法

本文介绍了一种使用LZW算法进行中文压缩的方法,并详细展示了如何在AS3中实现文本的压缩与解压缩过程。通过具体代码示例,讲解了如何将字符串转换为UTF-8编码,以及如何利用自定义的lzwcn类进行数据压缩和解压。
摘要由CSDN通过智能技术生成
  1 function utf8(){
  2 
  3 }
  4 
  5 utf8.prototype.encode=function(text)
  6 {
  7     var result = "";
  8     for (var n = 0; n < text.length; n++)
  9     {
 10         var c = text.charCodeAt(n);
 11         if (c < 128)
 12         {
 13             result += String.fromCharCode(c);
 14         }
 15         else if (c > 127 && c < 2048)
 16         {
 17             result += String.fromCharCode((c >> 6) | 192);
 18             result += String.fromCharCode((c & 63) | 128);
 19         }
 20         else
 21         {
 22             result += String.fromCharCode((c >> 12) | 224);
 23             result += String.fromCharCode(((c >> 6) & 63) | 128);
 24             result += String.fromCharCode((c & 63) | 128);
 25         }
 26     }
 27     return result;
 28 }
 29 
 30 utf8.prototype.decode=function(text)
 31 {
 32     var result = "";
 33     var i = 0;
 34     var c1 = 0;
 35     var c2= 0;
 36     var c3 = 0;
 37     while (i < text.length)
 38     {
 39         c1 = text.charCodeAt(i);
 40         if (c1 < 128)
 41         {
 42             result += String.fromCharCode(c1);
 43             i++;
 44         }
 45         else if (c1 > 191 && c1 < 224)
 46         {
 47             c2 = text.charCodeAt(i + 1);
 48             result += String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
 49             i += 2;
 50         }
 51         else
 52         {
 53             c2 = text.charCodeAt(i + 1);
 54             c3 = text.charCodeAt(i + 2);
 55             result += String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
 56             i += 3;
 57         }
 58     }
 59     return result;
 60 }
 61 
 62 /**
 63  * Created with JetBrains WebStorm.
 64  * User: Administrator
 65  * Date: 12-8-3
 66  * Time: 下午4:01
 67  * To change this template use File | Settings | File Templates.
 68  */
 69 /**
 70  * lzw中文压缩类
 71  * @type {*}
 72  */
 73 function lzwcn(){
 74 
 75 }
 76 
 77 lzwcn.prototype.compress=function(str){
 78     var rStr='';
 79     rStr=as3long.utf8.encode(str);
 80     var i=0;
 81     var size=0;
 82     var xstr='';
 83     var chars = 256;
 84     var dict = new Array();
 85     for (i = 0; i < chars; i++)
 86     {
 87         dict[String(i)] = i;
 88     }
 89     var splitted=new Array();
 90     splitted   = rStr.split("");
 91     var buffer=new Array();
 92     size=splitted.length;
 93     var current='';
 94     var result = new String("");
 95     for(i = 0;i<=size;i++)
 96     {
 97         current = new String(splitted[i]);
 98         xstr = (buffer.length == 0) ? String(current.charCodeAt(0)) : (buffer.join("-") + "-" + String(current.charCodeAt(0)));
 99         if (dict[xstr] !== undefined)
100         {
101             buffer.push(current.charCodeAt(0));
102         }
103         else
104         {
105             result += String.fromCharCode(dict[buffer.join("-")]);
106             dict[xstr] = chars;
107             chars++;
108             buffer = new Array();
109             buffer.push(current.charCodeAt(0));
110         }
111     }
112     return result;
113 }
114 
115 lzwcn.prototype.decompress=function(str){
116     var i;
117     var chars = 256;
118     var dict = new Array();
119     for (i = 0; i < chars; i++)
120     {
121         dict[i] = String.fromCharCode(i);
122     }
123     var original = new String(str);
124     var splitted= original.split("");
125     var size = splitted.length;
126     var buffer= new String("");
127     var chain= new String("");
128     var result = new String("");
129     for (i = 0; i < size; i++)
130     {
131         var code = original.charCodeAt(i);
132         var current = dict[code];
133         if (buffer == "")
134         {
135             buffer = current;
136             result += current;
137         }
138         else
139         {
140             if (code <= 255)
141             {
142                 result += current;
143                 chain = buffer + current;
144                 dict[chars] = chain;
145                 chars++;
146                 buffer = current;
147             }
148             else
149             {
150                 chain = dict[code];
151                 if (chain == null)
152                 {
153                     chain = buffer + buffer.slice(0, 1);
154                 }
155                 result += chain;
156                 dict[chars] = buffer + chain.slice(0, 1);
157                 chars++;
158                 buffer = chain;
159             }
160         }
161     }
162     result = as3long.utf8.decode(result);
163     return result;
164 }
165 
166 /**
167  * Created with JetBrains WebStorm.
168  * User: Administrator
169  * Date: 12-8-3
170  * Time: 下午4:50
171  * To change this template use File | Settings | File Templates.
172  */
173 function as3long(){
174 
175 }
176 
177 as3long.prototype.lzwcn=new lzwcn();
178 as3long.prototype.utf8=new utf8();
179 window.as3long=new as3long();
180 
181

压缩版下载地址: http://files.cnblogs.com/longhuang/as3long.min.js

使用方法

 

1 var str1=as3long.lzwcn.compress("At Microsoft, we've got a long history with email — from Hotmail, our consumer service used by more than 300 million people monthly, to Outlook and Exchange, the software and service managing communications, calendar, and contacts for many millions more.Using the lessons we've learned from both consumers and enterprises, it's our goal to become the very best email service anywhere. That is a big statement – but one we are absolutely committed to deliver upon. That journey starts today.An experience with no compromisesOutlook.com is the first step in creating one complete experience for the next generation of communications. Email should be connected to your friends – whether they like to use Facebook, Twitter, LinkedIn, Google, or a combination. Email should let you get more done, faster – with immediate access to your inbox and tools that can automatically categorize, move, or delete messages you don't want. Email should be deeply integrated with other services – for Outlook.com, you'll find that Office Web Apps, SkyDrive, and, soon, Skype come built right in. And we hope you have already noticed our fast, beautiful user experience. We'd love your feedbackAs we've said before, there is much more to come. If you'd like to follow along in real time, be sure to subscribe to our blog or follow us on Twitter. Along the way, if you've got any questions, comments, or concerns, please submit that feedback via the options menu in our header.Learn more");
2 var str2=as3long.lzwcn.decompress(str1);

效果:

At Microsoft, we've goāa long historyčith email â fĆm HĕīĭČour cĚsumeĿsņvĄĒuňd bĤmĢĒħan 300 mĭliĚ peoplĒœnħlyČġ Outęok ŗŏExchŗgeůhĒĈĊwarĒŹ ňrŊcũŗagiěŀommunĄatšnsČcaŨndƈČƋŁūactsijĢŝŗŒşƠƱœƉ.UsƕĜħĒŨsĈơčďđĘeƈneŏĴƘŐĕĨƬŃŅrƱƋeūņprğeƢ Ħ'ƱĽĿĔƥ ŰbeŁŅǫƃ đģŐǡāĪĬĮƍƏƊnywƃƻ TžāğŸŐiĜĠƞĪǛāİŐų ĚĒĎŸƉŸbĈlųeŭƗƙĦtǎǫo dȡiǴ upĚ.ȄȆ jǧǍĤȍrưȨƨy.AŘexŤǟǛƐĥħ nȩǯǞƘǠsŲŴoŶ.ǯǣƱǁijiǘāĠepǣŘąNjƟƖȗȣŧeȦĩɅņiɈĒfƳɜǍxāƀǍrƞƠȖfȣƚƜƤƟłȳEĺǻhĽlŏǭƗnǍƯȧŰyǧijɇƧƱȒčƃǁĿǁĤŠkŕȩōĒFƮebɖkČTwȥņČLƕʥdInČGɖgŨļĿėǯbƕɾȲ ʉǺƌʌuʎNJāʗuēɭŝŔȪȗČfaɡĿʝʲɋiƙǎiȎŸcƐDŽȨ ˒ĿƕʭxŸƧȨolɛȵƤŘaųƘɾƤlȢʅeĔǟzƁ˖đˁȪȡɭũǡsƓǡˬĽ˘n'āƇūʈʊˌʍʏĒȫɢȢƕȦgɽȦŏˠĨǓņƌʼnŋʜȓɵĿɔŵkɘƘČ˒'̀ɝ˳ŖāOffŋ Wʬ AppǢSkyDǟ̉˲dČĈĚČ͏yŤȣĒbuĭāǟghȇnȳɂ̩Ēʌ͝˒ĝaljƥƉadĤɍƟƐŏʘ˛ĠČǭ˻ƟfˎȯƍɯɆɲnƐȳ͈'ŏęlj˭ijeǎbƮkAƱĎĐƄĬ̴̟̇ʠĒȈƚŽ˖țŰǯeȳIʁ̼Ώiʥ˫ɵ̀owŸęƖƕ ʹĮƟŅͿƄľʦƌuȝąiʐŰʘbęĜƳδęηōȖŘʱʳrͩιǀDzƇŮǣήĽΜēĕ˲ĤquǷƸƣƘŅūǢƳƬƐrơČɬ˜ςbŞā́ΓΕΗdz˥DZĒŦʆdžϮ˓λʘƃ͵ņ.LNjϴΧe||||||789
At Microsoft, we've got a long history with email — from Hotmail, our consumer service used by more than 300 million people monthly, to Outlook and Exchange, the software and service managing communications, calendar, and contacts for many millions more.Using the lessons we've learned from both consumers and enterprises, it's our goal to become the very best email service anywhere. That is a big statement – but one we are absolutely committed to deliver upon. That journey starts today.An experience with no compromisesOutlook.com is the first step in creating one complete experience for the next generation of communications. Email should be connected to your friends – whether they like to use Facebook, Twitter, LinkedIn, Google, or a combination. Email should let you get more done, faster – with immediate access to your inbox and tools that can automatically categorize, move, or delete messages you don't want. Email should be deeply integrated with other services – for Outlook.com, you'll find that Office Web Apps, SkyDrive, and, soon, Skype come built right in. And we hope you have already noticed our fast, beautiful user experience. We'd love your feedbackAs we've said before, there is much more to come. If you'd like to follow along in real time, be sure to subscribe to our blog or follow us on Twitter. Along the way, if you've got any questions, comments, or concerns, please submit that feedback via the options menu in our header.Learn more||||||1467

转载于:https://www.cnblogs.com/longhuang/archive/2012/08/03/2622213.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值