Jaki jest właściwy sposób konwertowania bajta [] na ciąg Base64 w języku Java? Jeszcze lepiej byłoby Grails/Groovy, ponieważ mówi mi, że funkcja encodeAsBase64()
jest przestarzała. Pakiet sun.misc.BASE64Encoder
nie jest zalecany do użycia i wyprowadza inny rozmiar na niektórych platformach Windows.Kodowanie Base64 w języku Java/Groovy
22
A
Odpowiedz
12
Apache Commons ma wiele narzędzi:
binarny pakiet: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
Download: http://commons.apache.org/codec/download_codec.cgi
2
można użyć open source Base64Coder bibliotekę
import biz.source_code.base64Coder.Base64Coder
@Grab(group='biz.source_code', module='base64coder', version='2010-09-21')
String s1 = Base64Coder.encodeString("Hello world")
String s2 = Base64Coder.decodeString("SGVsbG8gd29ybGQ=")
76
preferowany sposób zrobić to w groovy jest:
def encoded = "Hello World".bytes.encodeBase64().toString()
assert encoded == "SGVsbG8gV29ybGQ="
def decoded = new String("SGVsbG8gV29ybGQ=".decodeBase64())
assert decoded == "Hello World"
0
zaimplementować własną metodę tak :)
public class Coder {
private static final String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
public static String encodeAsBase64(String toEncode) {
return encodeAsBase64(toEncode.getBytes())
}
public static String encodeAsBase64(byte[] toEncode) {
int pos = 0;
int onhand = 0;
StringBuffer buffer = new StringBuffer();
for(byte b in toEncode) {
int read = b;
int m;
if(pos == 0) {
m = (read >> 2) & 63;
onhand = read & 3;
pos = 1;
} else if(pos == 1) {
m = (onhand << 4) + ((read >> 4) & 15);
onhand = read & 15;
pos = 2;
} else if(pos == 2) {
m = ((read >> 6) & 3) + (onhand << 2);
onhand = read & 63;
buffer.append(base64code.charAt(m));
m = onhand;
onhand = 0;
pos = 0;
}
buffer.append(base64code.charAt(m));
}
while(pos > 0 && pos < 4) {
pos++;
if(onhand == -1) {
buffer.append('=');
} else {
int m = pos == 2 ? onhand << 4 : (pos == 3 ? onhand << 2 : onhand);
onhand = -1;
buffer.append(base64code.charAt(m));
}
}
return buffer.toString()
}
}
Powiązane problemy
- 1. Kodowanie znaków w języku Ruby przy użyciu Base64.encode
- 2. Wykryj kodowanie base64 w PHP?
- 3. Kodowanie i dekodowanie Base64 w wyroczni
- 4. Kodowanie/dekodowanie JSON kodowania/dekodowania base64 w kodzie JavaScript
- 5. C# do Ruby sha1 base64 kodowanie
- 6. Kodowanie wszystkich nie alfabetycznych w języku C#
- 7. Odczyt i kodowanie base64 pliku binarnego
- 8. C# do PHP base64 kodowanie/dekodowanie
- 9. Kodowanie czcionek Base64 dla Tumblr na Firefox
- 10. Base64 Kodowanie pliku Korzystanie NSData Kawałki
- 11. Kodowanie Base64 w Swift nie będzie dekodowane w Androidzie
- 12. Jak base64 kodowanie obrazu w linux bash/shell
- 13. Co to jest kodowanie w języku XML?
- 14. Kodowanie HTML tekstu w języku japońskim
- 15. kodowanie/dekodowanie obrazu z obrazem base64 zrywa obraz
- 16. Czy kodowanie w języku HTML może coś zrobić bez JavaScriptu?
- 17. Kodowanie znaków w języku Python za pomocą adresu urllib.quote
- 18. Złe kodowanie podczas korzystania z strftime w języku hiszpańskim?
- 19. W języku Ruby, Jak odczytać kodowanie UTF-8 z gniazda?
- 20. Kodowanie i dekodowanie obiektów bitmapowych w łańcuchu base64 w systemie Android
- 21. Kodowanie obiektu w SmtpClient/MailMessage
- 22. Kodowanie obrazu bazowego Phonegap64
- 23. NSImage to Base64
- 24. Java - kodowanie obrazu w XML
- 25. Dekodowanie łańcucha Base64 do tablicy bajtów
- 26. Jaki jest prawdziwy cel kodowania Base64?
- 27. Kodowanie UTF-8 Kodowanie rozmiaru:
- 28. Kodowanie zagnieżdżone Kodowanie zagnieżdżone modele
- 29. kodowanie pliku base64 i wysyłanie jako String, a następnie dekodowanie String
- 30. Czy istnieje kodowanie, które można wymówić?
Problem polega na tym, że 'encodeBase64' stawia linię linię kończącą się co 76 znaków, które bałagan długości strunowy. W końcu użyłem 'def encoded = byteArray.collect {it char char} zamiast kodowania Base64. –
Domyślnie groovy nie wstawia dodatkowych znaków nowej linii w kodowaniu od wersji 1.6.0. Wywołanie 'encodeBase64 (true)' włącza to zachowanie. – ataylor
+1 dla prostego, zwięzłego rozwiązania, którego mogę użyć w krótkim małym skrypcie (bez żadnych bibliotek) potrzebuję do sprawdzenia pewnych rzeczy :-) – jpswain