来源:https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/btoa
WindowOrWorkerGlobalScope.btoa() 将ascii字符串或二进制数据转换成一个base64编码过的字符串,该方法不能直接作用于Unicode字符串.
语法
let encodedData = window.btoa(stringToEncode);
参数
- 一个字符串, 其字符分别表示要编码为 ASCII 的二进制数据的单个字节。
stringToEncode
返回值
一个包含 stringToEncode 的 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)));
}
*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;
}
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]);
}
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]);
}