【问题标题】:Base 64 decoding in AndroidAndroid中的Base 64解码
【发布时间】:2017-04-13 16:41:19
【问题描述】:

我有一个 Base 64 编码的字符串: "MTg2MTYyOTAuMTQ5MTg1NzAxMy4a1x1biIm69KFEf6yYRztKIW745NNj+qzzDAQoEOiBYw=="

当我尝试在 Android 中对它进行 Base 64 解码时,它会给出一些垃圾字符。

输出:18616290.1491857013.�[����D��G;J!n���c��(�c

预期:18616290.1491857013.[DG;J!nc(c

我使用的代码是:

String val =new String(Base64.decode(encodedString,Base64.DEFAULT));

有一些垃圾“?”人物介绍。我该如何摆脱它们?

谢谢。

【问题讨论】:

  • 确保将 UTF-8 字符串传递给 base-64 编码器。我怀疑“垃圾字符”实际上应该在那里。当我复制并粘贴它时,您粘贴的“预期”值在(c 之间有一个“垃圾字符”。基于an online base-64 encoder,该字符串的base-64编码比您问题中的编码要短得多。
  • 已编辑。从预期输出中删除了垃圾字符。
  • 该输出的 base-64 UTF-8 编码是 MTg2MTYyOTAuMTQ5MTg1NzAxMy5bREc7SiFuYyhj,基于 this encoder。这与您所拥有的编码值不同 - 并且大大缩短。同样,我认为问题在于您的编码,而不是 Andoid 执行解码。

标签: android encoding base64 decoding


【解决方案1】:

试试:

private String decodeString(String encoded) {
    byte[] dataDec = Base64.decode(encoded.replace("=", ""), Base64.DEFAULT);
    String decodedString = "";
    try {

        decodedString = new String(dataDec, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();

    } finally {

        return decodedString;
    }
}

【讨论】:

  • 解决方案确实是在新字符串中指定原始字节的字符集。而不是 UTF-8,可能是 Cp1252 或其他。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2018-05-27
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 2018-03-19
相关资源
最近更新 更多