Base64 JavaScript版本 UTF-8 为基准
以下简要说面实现,不说明理论。
将字符串转二进制
首先,我们要将待转换的源串转成二进制。var unicode = string.charCodeAt(index);
那么首先通过字符串的##charCodeAt函数获取字符测unicode值
var binary = unicode.toString(2)
然后,通过Number.toString(2) 将unicode值转换成二进制。
因为不同的字符所占字节是不一样的,比如26个字母,它们不管大小写都是占据一个字节。
又比如汉字在UTF-8中占据着三个字节。如下不同的unicode值对应占据字节的个数,
以及转换二进制关系| Unicode符号范围 | UTF-8编码方式
n | (十六进制) | (二进制)
—+———————–+——————————————————
0000 0000 - 0000 007F | 0xxxxxxx
0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000 - 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx二进制的补齐以及转换unicode对应的二进制格式
2.1 通过unicode 或者 binary 的值参照上表,不足位数的在前面补0,并且添加前缀。
2.2 循环取出源串中的字符进行转换并拼接在一块,最后得到源串对应的二进制串。
2.3 然后循环,间隔6位为一个单位取出二进制串,这样就得到了一个base64字符串的索引对应的二进制indexBinary,
2.4 接着,将二进制转换成10进制var index = parseInt(indexBinary, 2);
对应索引拼接Base64字串
我们知道Base64字串是由A-Z、a-z、0-9、+、/组成
var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var base64Char = code.charAt(index);
这样我们就得到了对应的base64字符。
由于一个字节是8位,而我们取出的规则是按照6位取的,这样就有可能出现最后一次取值得时候
不足6位,如下:1.0: M 01001101 一个字节会多出01 那么我们在它后面补0 01001101 0000 010011 01 010011 010000 2.0: M M 01001101 01001101 01001101 01001101 00 010011 010100 1101 010011 010100 110100
因为Base64字符的最小单位是四个字符一组,所以上1.0中需要补充两个=,2.0需要补充一个=,即:
010011 010000
T Q = =
2.0的以此类推最后拼接得到Base64字串.
以下提供参考:
http://download.csdn.net/detail/u013791665/9862535
http://download.csdn.net/detail/u013791665/9862367