[Base64] Encoding von String nicht korrekt

Status
Nicht offen für weitere Antworten.

smo

Neues Mitglied
Hallo,

ich möchte die Sonderzeichen einer ldif-Datei für den Import in ein LDAP-Verzeichnis konvertieren. Die Zeichen müssen dazu mit Base64 encoded werden, dazu verwende ich org.apache.commons.codec.binary.Base64:

Code:
private static String encodeSpecialCharsWithBase64(String line)
{
	String encodedLine = null;
	if (line != null)
	{
		int colonPos = line.indexOf(':');
		encodedLine = line.substring(0, colonPos) + ":: ";
		
		String encodeString = line.substring(colonPos+2).trim();
		System.out.println(encodeString);
		
		byte [] encodeBytes = encodeString.getBytes();
		byte [] encodedBytes = Base64.encodeBase64(encodeBytes);
		
		encodedLine += new String(encodedBytes);
		System.out.println(encodedLine);
	}
	return encodedLine;
}

Wenn ich der Methode "mozillaHomeLocalityName: Göttingen" übergebe, erhalte ich als Ausgabe:

Code:
Göttingen
mozillaHomeLocalityName:: R/Z0dGluZ2Vu

Beim Importieren in ldap bekomme ich mit dieser neuen Zeile einen Fehler.
Code:
ldap_add: Invalid syntax (21)
        additional info: mozillaHomeLocalityName: value #0 invalid per syntax
Der Abgleich mit http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/end.htm liefert mir "R8O2dHRpbmdlbg==" als Ergebnis. Mit diesem String funktioniert auch der ldap-Import.

Wo liegt der Fehler in meinem Code?

Danke vorab
smo
 
Bei diesem Encoding passiert zweierlei: zunächst wird der (Unicode-)String in ein Byte-Array gewandelt, und dann wird dieses Byte-Array Base-64-codiert.

Das Besipiel unter selfthml liefert die Base64-codierte UTF-8-Repräsentation des Strings. In Deinem Code wird die systemspezifische Default-Codierung verwendet, um vom Unicode-String zum Byte-Array zu kommen. Um hier explizit die UTF-8-Codierung zu verwenden, muss man das angeben:

Code:
byte [] encodeBytes = encodeString.getBytes( "UTF-8");

Damit kommt dann auch das gewünschte Muster "R8O2dHRpbmdlbg==" heraus.
 
das ist das Problem

die Frage ist, was LDAP für ein Encoding verwendet, dieses müsste man dann auch beim Codieren verwenden

vermutlich ISO-8859-1 oder sowas
 
???:L
Ich hatte den Post so verstanden, dass es mit dem per JavaScript-Beispiel von selfhtml erzeugten UTF-8-String funktioniert hat; insofern sieht es doch so aus, als würde beim LDAP-Import UTF-8 verwendet werden.
 
AH ja, genau so wirds sein

@smo ignorier mal den Hinweis mit ISO-8859-1

die neueren Linuxe basieren ja alle schon auf UTF-8, dann gilt das wohl auch für die ldif Dateien
 
Danke, das war's. Mein Standardzeichensatz war tatsächlich 8859-15 statt UTF8. Nun tut es wie es soll und ich darf Sonderzeichen in meinem ldap bewundern. 🙂

Grüsse
smo
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben