<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[刘新修]]></title> 
<link>http://pic1.liuxinxiu.com:80/index.php</link> 
<description><![CDATA[刘新修的个人博客 (Liuxinxiu'S Blog)]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[刘新修]]></copyright>
<item>
<link>http://pic1.liuxinxiu.com:80/base64_JS/</link>
<title><![CDATA[原生JS对字符串进行base64编码/解码]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[H5/JS/CSS]]></category>
<pubDate>Fri, 23 Oct 2015 05:54:18 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/base64_JS/</guid> 
<description>
<![CDATA[ 
	<div class="codeText"><div class="codeHead">JavaScript代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="comment">/**** 下面是64个基本的编码 ****/</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">var</span><span> base64EncodeChars=</span><span class="string">&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">var</span><span> base64DecodeChars=</span><span class="keyword">new</span><span> Array(&nbsp;&nbsp;</span></span></li><li><span>-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,&nbsp;&nbsp;</span></li><li class="alt"><span>-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,&nbsp;&nbsp;</span></li><li><span>-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,&nbsp;&nbsp;</span></li><li class="alt"><span>52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,&nbsp;&nbsp;</span></li><li><span>-1,&nbsp;&nbsp;0,&nbsp;&nbsp;1,&nbsp;&nbsp;2,&nbsp;&nbsp;3,&nbsp;&nbsp;4,&nbsp;&nbsp;5,&nbsp;&nbsp;6,&nbsp;&nbsp;7,&nbsp;&nbsp;8,&nbsp;&nbsp;9, 10, 11, 12, 13, 14,&nbsp;&nbsp;</span></li><li class="alt"><span>15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,&nbsp;&nbsp;</span></li><li><span>-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,&nbsp;&nbsp;</span></li><li class="alt"><span>41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);&nbsp;&nbsp;</span></li><li><span><span class="comment">/**** 编码的方法 ****/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">function</span><span> base64encode(str) &#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">var</span><span> out,i,len;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">var</span><span> c1,c2,c3;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;len=str.length;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;i=0;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;out=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">while</span><span>(i&lt;len)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;c1=str.charCodeAt(i++)&amp;0xff;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(i==len)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(c1&gt;&gt;2);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt((c1&amp;0x3)&lt;&lt;4);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=<span class="string">&quot;==&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;c2=str.charCodeAt(i++);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(i==len)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(c1&gt;&gt;2);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(((c1&amp;0x3)&lt;&lt;4)&#124;((c2&amp;0xF0)&gt;&gt;4));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt((c2&amp;0xF)&lt;&lt;2);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=<span class="string">&quot;=&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;c3=str.charCodeAt(i++);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(c1&gt;&gt;2);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(((c1&amp;0x3)&lt;&lt;4)&#124;((c2&amp;0xF0)&gt;&gt;4));&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(((c2&amp;0xF)&lt;&lt;2)&#124;((c3&amp;0xC0)&gt;&gt;6));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=base64EncodeChars.charAt(c3&amp;0x3F);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">return</span><span> out;&nbsp;&nbsp;</span></span></li><li><span>&#125;;&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">/**** 解码的方法 ****/</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">function</span><span> base64decode(str)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">var</span><span> c1,c2,c3,c4;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">var</span><span> i,len,out;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;len=str.length;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;i=0;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;out=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">while</span><span>(i&lt;len)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">do</span><span>&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;c1=base64DecodeChars[str.charCodeAt(i++)&amp;0xff];&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&#125;<span class="keyword">while</span><span>(i&lt;len&amp;&amp;c1==-1);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">if</span><span>(c1==-1)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">do</span><span>&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;c2=base64DecodeChars[str.charCodeAt(i++)&amp;0xff];&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&#125;<span class="keyword">while</span><span>(i&lt;len&amp;&amp;c2==-1);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">if</span><span>(c2==-1)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;out+=String.fromCharCode((c1&lt;&lt;2)&#124;((c2 &amp; 0x30)&gt;&gt;4));&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;<span class="keyword">do</span><span>&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;c3=str.charCodeAt(i++)&amp;0xff;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(c3==61)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span> out;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;c3=base64DecodeChars[c3];&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&#125;<span class="keyword">while</span><span>(i&lt;len&amp;&amp;c3==-1);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">if</span><span>(c3==-1)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;out+=String.fromCharCode(((c2&amp;0XF)&lt;&lt;4)&#124;((c3&amp;0x3C)&gt;&gt;2));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">do</span><span>&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;c4=str.charCodeAt(i++)&amp;0xff;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(c4==61)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span> out;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;c4=base64DecodeChars[c4];&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&#125; <span class="keyword">while</span><span>(i&lt;len&amp;&amp;c4==-1);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">if</span><span>(c4==-1)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;out+=String.fromCharCode(((c3&amp;0x03)&lt;&lt;6)&#124;c4);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">return</span><span> out;&nbsp;&nbsp;</span></span></li><li><span>&#125;;&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">function</span><span> utf16to8(str)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">var</span><span> out,i,len,c;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;out=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;len=str.length;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">for</span><span>(i=0;i&lt;len;i++)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;c=str.charCodeAt(i);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">if</span><span>((c&gt;=0x0001)&amp;&amp;(c&lt;=0x007F))&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=str.charAt(i);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&#125;<span class="keyword">else</span><span> </span><span class="keyword">if</span><span>(c&gt;0x07FF)&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(0xE0&#124;((c&gt;&gt;12)&amp;0x0F));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(0x80&#124;((c&gt;&gt;6)&amp;0x3F));&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(0x80&#124;((c&gt;&gt;0)&amp;0x3F));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&#125;<span class="keyword">else</span><span>&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(0xC0&#124;((c&gt;&gt;6)&amp;0x1F));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(0x80&#124;((c&gt;&gt;0)&amp;0x3F));&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;<span class="keyword">return</span><span> out;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;;&nbsp;&nbsp;</span></li><li><span><span class="keyword">function</span><span> utf8to16(str)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">var</span><span> out,i,len,c;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="keyword">var</span><span> char2,char3;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;out=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;len=str.length;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;i=0;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;<span class="keyword">while</span><span>(i&lt;len)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;c=str.charCodeAt(i++);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">switch</span><span>(c&gt;&gt;4)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span> 0:</span><span class="keyword">case</span><span> 1:</span><span class="keyword">case</span><span> 2:</span><span class="keyword">case</span><span> 3:</span><span class="keyword">case</span><span> 4:</span><span class="keyword">case</span><span> 5:</span><span class="keyword">case</span><span> 6:</span><span class="keyword">case</span><span> 7:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/** 0xxxxxxx **/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=str.charAt(i-1);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span> 12:</span><span class="keyword">case</span><span> 13:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/** 110x xxxx&nbsp;&nbsp; 10xx xxxx **/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char2=str.charCodeAt(i++);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(((c&amp;0x1F)&lt;&lt;6)&#124;(char2&amp;0x3F));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span> 14:&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/** 1110 xxxx&nbsp;&nbsp;10xx xxxx&nbsp;&nbsp;10xx xxxx **/</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char2=str.charCodeAt(i++);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char3=str.charCodeAt(i++);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out+=String.fromCharCode(((c&amp;0x0F)&lt;&lt;12)&#124;((char2&amp;0x3F)&lt;&lt;6)&#124;((char3&amp;0x3F)&lt;&lt;0));&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;<span class="keyword">return</span><span> out;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">/** 编码 **/</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="comment">/** val=base64encode(utf16to8(src)); **/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="comment">/** 解码 **/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="comment">/** val=utf8to16(base64decode(src)); **/</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="comment">/** var d=&quot;PGgxPjExMTwvaDE+PGRpdiBjbGFzcz0ibmFtZSI+MTEyMjwvZGl2Pg==&quot;; **/</span><span>&nbsp;&nbsp;</span></span></li></ol></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/base64_JS/#blogcomment</link>
<title><![CDATA[[评论] 原生JS对字符串进行base64编码/解码]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/base64_JS/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>