base64的编码解码的一些坑
1、
//编码
value = base64encode(utf16to8(src))
//解码
value = utf8to16(base64decode(src)) 这里:base64编码之前先转成utf8,解码出来的也要从utf-8转为utf-16
2、base64编码分为字符串编码成字符串,字符串编码成数组,字符串解码成数组,字符串解码成字符串,等
var startCmd2=[92,161,177,0,0,214,135];
var str = '';
for(var i=0 , len=startCmd2.length ; i < len ;++i){
str += String.fromCharCode(startCmd2[i]);
这是数组转成字符串的方法,亲测可用。
3、以下是我用到的字符串转成字符串编码方式:
function base64encode(str) {
var out, i, len;
var c1, c2, c3;
len = str.length;
i = 0;
out = "";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
4、以下是我用到的字符串转成数组解码方式:
function decodeBase64(strIn){
if(!strIn.length||strIn.length%4)
return null;
var str64=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var index64=[];
for(var i=0;i<str64.length;i++)
index64[str64.charAt(i)]=i;
var c0,c1,c2,c3,b0,b1,b2;
var len=strIn.length;
var len1=len;
if(strIn.charAt(len-1)=='=')
len1-=4;
var result=[];
for(var i=0,j=0;i<len1;i+=4){
c0=index64[strIn.charAt(i)];
c1=index64[strIn.charAt(i+1)];
c2=index64[strIn.charAt(i+2)];
c3=index64[strIn.charAt(i+3)];
b0=(c0<<2)|(c1>>4);
b1=(c1<<4)|(c2>>2);
b2=(c2<<6)|c3;
result.push(b0&0xff);
result.push(b1&0xff);
result.push(b2&0xff);
}
if(len1!=len){
c0=index64[strIn.charAt(i)];
c1=index64[strIn.charAt(i+1)];
c2=strIn.charAt(i+2);
b0=(c0<<2)|(c1>>4);
result.push(b0&0xff);
if(c2!='='){
c2=index64[c2];
b1=(c1<<4)|(c2>>2);
result.push(b1&0xff);
}
}
return result;
}
如果需要utf-8和utf-16的转换自行搜索吧……
base64的编码解码的一些坑的更多相关文章
- C#中Base64之编码,解码方法
原文:C#中Base64之编码,解码方法 1.base64 to string string strPath = "aHR0cDovLzIwMy44MS4yOS40Njo1NTU3L1 ...
- python 对任意文件(jpg,png,mp3,mp4)base64的编码解码
程序是事件驱动的,写博客是什么驱动的?事件? 时间?no,我承认我很懒,甚至不愿意记录总结.哪是什么驱动的? 对! 问题驱动的.遇到了问题解决了问题突然想起来搬到blog上,让遇到相同问题的可以参考下 ...
- 实现base64的编码解码,深刻理解base64
上代码 #include<stdio.h> #include<string.h> #include<stdlib.h> const char padding = ' ...
- C++ Base64 编码 解码
C++实现 base64 字符串编码解码(GCC编译). /** * @brief C++ base64 编解码 * @author wid * @date 2013-20-25 * * @note ...
- c# base64 编码解码
一. Base64的编码规则 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编 码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24 位数据,再把这24位数 ...
- nodejs base64 编码解码
普通字符串 编码解码: var b = new Buffer('JavaScript'); var s = b.toString('base64'); // SmF2YVNjcmlwdA== var ...
- OpenSSL 使用 base64 编码/解码
简述 关于 OpenSSL 的介绍及安装请参见:Windows下编译OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #incl ...
- 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- java 按字节读写二进制文件(Base64编码解码)
最近在做项目时遇到这样一个需求:依次读取本地文件夹里所有文件的内容,转为JSON,发送到ActiveMQ的消息队列, 然后从MQ的消息队列上获取文件的信息,依次写到本地.常见的文件类型,比如.txt ...
随机推荐
- css 实现文字图片垂直对齐
给图片使用vertical-align:middle;就可以实现 <!DOCTYPE html> <html lang="en"> <head> ...
- 关于云主机Thinkphp框架Session跨页失效的问题
在网站部署到云主机之后,前台一直能够正常显示,后台确登录不上去,验证码也无法显示,研究半天,才确定是Session跨页传递失效的问题.找网上各种解决方法,都是关于Php.ini文件的设置,可又解决不了 ...
- oracle nvl()函数
oracle的nvl()函数作用是当第一个值不为null时,返回第一个值,否则返回第二个值. 当第一个值为一个运算表达式时,那么第二个的值被限定为只能是NUMBER类型或者能隐式转换为NUMBER类型 ...
- rsa字符串格式公钥转换python rsa库可识别的公钥形式
在爬虫分析的时候,经常在网页上看到如下格式的rsa公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21 ...
- PIE_SDK.NET功能表
- sencha touch 手势识别左右滑动
sencha touch 中添加手势识别非常简单,就是监听 dom 元素的 move 事件: 1. 为你的 view 注册 swipe 事件 // 为当前 view 注册手势滑动事件 Ext.get( ...
- 改修jquery支持cmd规范的seajs
手动包装jquery1.10.2,firebug说$没有定义 define(function (require, exports, module) {//jquery源码module.exports= ...
- Java线程池——ThreadPoolExecutor的使用
1 线程池的创建 ThreadPoolExecutor有以下四个构造方法 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...
- <数据挖掘导论>读书笔记2
1.频率和众数 frequency(vi)=具有属性值vi的对象数/m 分类属性的众数mode是具有最高频率的值. 2.百分位数 3.位置度量:均值和中位数 4.散布度量:极差和方差 绝对平均偏差 A ...
- Firebird DatabaseAccess WireCrypt DB2Provider
目前最新的Firebird版本是:3.0.3 使用过程的一些必经问题,嵌入式的模式就不再说了. 在使用标准Server版时,第一个要考虑的就是数据库文件的存放位置,默认配置放在windows/syst ...