# [Base64] Encoding von String nicht korrekt



## smo (16. Mrz 2006)

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:


```
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:


```
Göttingen
mozillaHomeLocalityName:: R/Z0dGluZ2Vu
```

Beim Importieren in ldap bekomme ich mit dieser neuen Zeile einen Fehler.

```
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


----------



## Murray (17. Mrz 2006)

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:


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

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


----------



## Bleiglanz (17. Mrz 2006)

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


----------



## Murray (17. Mrz 2006)

???: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.


----------



## Bleiglanz (17. Mrz 2006)

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


----------



## Guest (17. Mrz 2006)

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


----------

