基于JavaScript的轻量化BASE64编码及解码算法
2015-06-19王芳白宇
王芳 白宇
摘要:通过对传统BASE64编码及解码算法进行改造,使用预处理技术、哈希技术和正则文法,提出了一种适合Web客户端应用,使用JavaScdpt编码的轻量化BASE64编码及解码算法。该算法比传统的BASE64编码及解码算法实现简单,代码效率高。
关键词:BASE64;Web;哈希;编码;解码
中图分类号:TP311.12 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.04.005
0.引言
在Web应用开发过程中,客户端编码经常遇到一些非标ASCII字符串传输的问题。如果该字符串是URI(统一资源标识符),通常的解决办法是使用JavaScript中Globa对象的encodeURIO和decodeURIO方法;如果该字符串是用于客户端和服务端参数传递的内容,则通常的解决办法是使用JavaScript中Globa对象的escapeO和unescapeO方法。但是这两种方法都存在很大的局限性,例如,所编码的字符串长度有很大限制,编码内容对于不同版本及语言浏览器中不同版本的脚本引擎并不完全兼容。
而在Web客户端普遍使用的ASCII全兼容编码是BASE64,但传统的BASE64编码、解码算法相对比较笨重,实现代码较多,算法较复杂,不符合Web客户端代码轻量化的需求。本文从字符映射、哈希和正则文法的角度出发,提出了一种简洁、高效的编码、解码算法。
1.算法思路
由于Web中的所有字符均以Unicode的方式进行表示,因此编码之前首先需将Unicode字符串转换为UCS-16编码的字节数组;同理,解码之后,需将UCS-16编码的字节数组转换为Unicode字符串。因此整个算法分为四个部分:Unicode字符串转为UCS-16字节数组;BASE64编码算法;BASE64解码算法;UCS-16字节数组转为Unicode字符串。关于BASE64编码、解码的一般规则,可参见文献,本文不再赘述。