【问题标题】:Base64 encoder and decoderBase64 编码器和解码器
【发布时间】:2011-05-18 08:32:16
【问题描述】:

Android 中是否有用于字符串的 base-64 解码器和编码器?

【问题讨论】:

    标签: java android base64 encoder decoder


    【解决方案1】:

    android.util.Base64

    这似乎是在 API 版本 8 或 android 2.2 中添加的,因此它不会在旧平台上可用。

    但它的来源是android/util/Base64.java,因此如果需要,可以将其原封不动地复制到旧版本中。

    【讨论】:

    • Mw== 的编码 Base64 是 TXc9PQ== 但是这个源代码显示 TXc9PQo= 怎么了?! :-o
    • @Mr.Hyde 你有一个尾随的新行。 TXc9PQo= 解码为Mw==\n
    • 是的,为了解决这个问题,我们应该在 encodeToString 函数中使用 Base64.NO_WRAP 作为标志,而不是 Base64.DEFAULT。
    • 你有 Base64.class 但它有一个错误“$assertionsDisabled 无法解析为变量”
    【解决方案2】:

    这是一个如何使用Base64 类对简单字符串值进行编码和解码的示例。

    // String to be encoded with Base64
    String text = "Test";
    // Sending side
    byte[] data = null;
    try {
        data = text.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }
    String base64 = Base64.encodeToString(data, Base64.DEFAULT);
    
    // Receiving side
    byte[] data1 = Base64.decode(base64, Base64.DEFAULT);
    String text1 = null;
    try {
        text1 = new String(data1, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    

    此摘录可以包含在 Android 活动中。

    【讨论】:

    • 使用 Base64.DEFAULT 将在我的情况下插入换行符。我改用Base64.NO_WRAP
    • 唯一一个对我有用的 2 字节字符。
    【解决方案3】:

    这是我将要使用的一个简单方法,直到我意识到这仅在 Android API 8+ 中受支持:

    // Has line break
    public String getBase64(String input) {
        return Base64.encodeToString(input.getBytes(), Base64.DEFAULT);
    }
    
    // No line break
    public String getBase64(String input) {
        return Base64.encodeToString(input.getBytes(), Base64.NO_WRAP);
    }
    

    【讨论】:

    • 正如@arvin 上面评论的那样:“在我的情况下,使用 Base64.DEFAULT 会插入一个换行符。我使用 Base64.NO_WRAP 代替。”
    【解决方案4】:

    如果您不想希望在字符串末尾有一个换行符,请将标志从 Base64.DEFAULT 更改为 Base64.NO_WRAP

    Base64.encodeToString("yourString".getBytes("UTF-8"), Base64.NO_WRAP);
    

    【讨论】:

      【解决方案5】:

      编码:

      private String encodeString(String s) {
          byte[] data = new byte[0];
      
          try {
              data = s.getBytes("UTF-8");
      
          } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
          } finally {
              String base64Encoded = Base64.encodeToString(data, Base64.DEFAULT);
      
              return base64Encoded;
      
          }
      }
      

      解码:

      private String decodeString(String encoded) {
          byte[] dataDec = Base64.decode(encoded, Base64.DEFAULT);
          String decodedString = "";
          try {
      
              decodedString = new String(dataDec, "UTF-8");
          } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
      
          } finally {
      
              return decodedString;
          }
      }
      

      示例

          String text = "example007";
      
          Log.e("encoded", encodeString(text)); //Output: ZXhhbXBsZTAwNw==
          Log.e("decoded", decodeString(encodeString(text))); //Output: example007
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-14
        • 2018-07-04
        相关资源
        最近更新 更多