专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java、JS、OC、Flutter的Base64编码和解码

temp10 2024-10-05 01:09:37 java教程 9 ℃ 0 评论


1 Base64编码的应用场景分析

  • 如微信中昵称特殊字符的处理,在向数据库中保存编码,取用时解码。
  • 可以方便的将用户的任何输入转换成只包含特定字符的安全格式
  • 某些系统中只能使用ASCII字符,通过Base64可以将非ASCII字符的数据转换成ASCII字符
  • 如http协议当中的key value字段,必须进行URLEncode 不然出现的等号可能使解析失败 空格也会使http请求解析出现问题

2 Java8中的Base64编码

在Java7及7之前,要实代Base64编码,要么借助sun.misc.BASE64Encoder,或者apache commons-codec,再或者Guava、JAXB的DatatypeConverter,到了Java8,官方已经把Base64进行了重新优化,并直接放到了java.util包里了。

Java、JS、OC、Flutter的Base64编码和解码

实现起来,比之前的都要简单优雅,性能卓越,无需引用第三方包。


///代码清单 1-1 
public class CommonStringUtils {

  ///构建编码器
  private final static Base64.Encoder ENCODER = Base64.getEncoder();
  ///构建解码器
  private final static Base64.Decoder DECODER = Base64.getDecoder();

  /**
   * 解码 
   * @param str 需要解码的 String
   * @return 解码后的 String
   */
  public static String decoderStr(String str) {
    try {
      // decode 解码后为byte字节数组 
      return new String(DECODER.decode(str), "utf-8");
    } catch (
        UnsupportedEncodingException e) {
      e.printStackTrace();
      return str;
    }
  }


  /**
   * 
   * @param str 需要编码的字符串
   * @return 返回编辑后的字符串
   */
  public static String endoderStr(String str) {
    try {
      return ENCODER.encodeToString(str.getBytes("utf-8"));
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    return str;
  }


}

12345678910111213141516171819202122232425262728293031323334353637383940414243

3 JS 中的Base64编码与解码

从IE10+浏览器开始,所有浏览器就原生提供了Base64编码、解码方法,使用语法如下:


//需要编码的字符串 
var str ="";
// 编码
var encodeStr = window.btoa(str) 

//需要解码的字符串
var decodeStr = "";
//解码
var dStr = window.atob(decodeStr) 
12345678910

3 OC中的Base64编码与解码

//需要编码的字符串 
NSString *string = @"";
//获取编码后的Data
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

//获取编码后的 String 
//NSString *stringBase64 = [data base64Encoding]; // base64格式的字符串(不建议使用,用下面方法替代)
NSString *stringBase64 = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; // 
12345678
//需要解码的字符串 
NSString *stringBase64 = @"";
//获取解码后的 NSData
NSData *data = [[NSData alloc] initWithBase64EncodedString:stringBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters];
//获取解码后的 String 
NSString *string =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
123456

4 Flutter中的Base64编码与解码

使用dart:convert库进行编码解码

// base64库
import 'dart:convert' as convert;
class Base64Util {
  ///Base64加密
  static String base64Encode(String str){
    ///
    var content = convert.utf8.encode(str);
    var digest = convert.base64Encode(content);
    return digest;
  }

  ///Base64解码
  static String base64Decode(String data){
    ///获取解码后的字节数组
    List<int> bytes = convert.base64Decode(data);
    //获取解码的字条串
    String result = convert.utf8.decode(bytes);
    return result;
  }
}
1234567891011121314151617181920

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表