Base64 енкодер и декодер

Има ли декодер base-64 и енкодер за String в Android?


person xydev    schedule 01.12.2010    source източник


Отговори (5)


Вижте android.util.Base64

Изглежда, че това е добавено в API версия 8 или android 2.2, така че няма да е налично на по-старите платформи.

Но източникът му е на android/util/Base64.java така че ако е необходимо, човек може просто да го копира непроменен за по-стари версии.

person Dan D.    schedule 01.12.2010
comment
кодиран Base64 на Mw== е TXc9PQ== Но този изходен код показва TXc9PQo= Какво не е наред?! :-о - person Dr.jacky; 01.08.2014
comment
@Mr.Hyde Имате нов ред в края. TXc9PQo= декодира до Mw==\n. - person Dan D.; 02.08.2014
comment
Да, и за да го разрешим, трябва да използваме Base64.NO_WRAP за флаг във функцията encodeToString, вместо Base64.DEFAULT. - person Dr.jacky; 02.08.2014
comment
здравейте, имам Base64.class, но има грешка $assertionsDisabled не може да бъде преобразувана в променлива - person Prasad; 13.09.2014

Това е пример за това как да използвате класа 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.

person blackpanther    schedule 22.08.2012
comment
използването на Base64.DEFAULT ще вмъкне нов ред в моя случай. Вместо това използвам Base64.NO_WRAP. - person Arvin; 18.12.2013
comment
Единственият, който работи за мен с 2 байта символи. - person Jerry; 03.07.2018

Ето един прост метод, който щях да използвам, докато разбрах, че това се поддържа само в 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);
}
person Jared Burrows    schedule 26.08.2012
comment
както @arvin коментира по-горе: използването на Base64.DEFAULT ще вмъкне нов ред в моя случай. Вместо това използвам Base64.NO_WRAP. - person AbdulMomen عبدالمؤمن; 30.06.2015

За кодиране:

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
person CommonSenseCode    schedule 23.12.2015

Ако не искате прекъсване на ред в края на низа, променете флаговете от Base64.DEFAULT на Base64.NO_WRAP

Base64.encodeToString("yourString".getBytes("UTF-8"), Base64.NO_WRAP);
person Hugo Gresse    schedule 07.05.2015