window.btoa转base64

来源:https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/btoa

WindowOrWorkerGlobalScope.btoa() 将ascii字符串或二进制数据转换成一个base64编码过的字符串,该方法不能直接作用于Unicode字符串.

Note: Since this function treats each character as a byte of binary data, regardless of the number of bytes which actually make up the character, an InvalidCharacterError exception is thrown if any character's code point is outside the range 0x00 to 0xFF. See Unicode strings for an example demonstrating how to encode strings with characters outside the 0x00 to 0xFF range

语法

let encodedData = window.btoa(stringToEncode);

参数

stringToEncode
一个字符串, 其字符分别表示要编码为 ASCII 的二进制数据的单个字节。

返回值

    一个包含 stringToEncode 的 Base64 表示的字符串。

base64-Latin1(characters range).png

Note: 该方法仅仅支持 在Latin1 范围的字符进行base64 编码!

例子

let encodedData = window.btoa("Hello, world"); // base64 编码
let decodedData = window.atob(encodedData); // 解码 成 ASCII

备注

由于一些网络通讯协议的限制,你必须使用该方法对原数据进行编码后,才能进行发送.接收方使用相当于 window.atob 的方法对接受到的base64数据进行解码,得到原数据.例如, 发送某些含有ASCII码表中0到31之间的控制字符的数据.

在用javascript编写XPCOM组件时, btoa()方法也是可用的,虽然全局对象已经不是 window 了.

Unicode 字符串

在各浏览器中,使用 window.btoa 对Unicode字符串进行编码都会触发一个字符越界的异常.

先把Unicode字符串转换为UTF-8编码,可以解决这个问题, 代码来自Johan Sundstr?m:

function utf8_to_b64( str ) {
    return window.btoa(unescape(encodeURIComponent( str )));
}

function b64_to_utf8( str ) {
    return decodeURIComponent(escape(window.atob( str )));
}

// Usage:
utf8_to_b64('? à la mode'); // "4pyTIMOgIGxhIG1vZGU="
b64_to_utf8('4pyTIMOgIGxhIG1vZGU='); // "? à la mode"
//译者注:在js引擎内部,encodeURIComponent(str)相当于escape(unicodeToUTF8(str))
//所以可以推导出unicodeToUTF8(str)等同于unescape(encodeURIComponent(str))

规范

DOM Level 0 不属于任何标准.

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support (Yes) (Yes) 10+ (Yes) (Yes)

自己写的代码:
/**
*svg的字符串获取svg的Base64
*/
function getBase64SVG(str){
var encodedData = 'data:image/svg+xml;base64,'+ utf8_to_b64(str);
return encodedData;
}
//直接svg字符串转base64
function utf8_to_b64(str){
    return window.btoa(unescape(encodeURIComponent(str)));
}


java中转base64
svgBase64Str = javax.xml.bind.DatatypeConverter.printBase64Binary(svgStr.getBytes("UTF-8"));
字符串转换成数组
public static String[] convertStrToArray2(String str){
        StringTokenizer st = new StringTokenizer(str,",");//把","作为分割标志,然后把分割好的字符赋予StringTokenizer对象。
        String[] strArray = new String[st.countTokens()];//通过StringTokenizer 类的countTokens方法计算在生成异常之前可以调用此 tokenizer 的 nextToken 方法的次数。
        int i=0;
        while(st.hasMoreTokens()){//看看此 tokenizer 的字符串中是否还有更多的可用标记。
            strArray[i++] = st.nextToken();//返回此 string tokenizer 的下一个标记。
        }
        return strArray;
    }
判断一个数组中是否有包含
String flag="";
    for(int i=0;i<priceArr.length;i++){
    if(params.getPriceStr().equalsIgnoreCase(priceArr[i])){
    flag ="include";
    continue;
    }
    }
    if(!"include".equalsIgnoreCase(flag)){
    params.setPriceStr(priceArr[0]);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值