# Base64_decode Umlaute Problem.



## rbrose (19. Apr 2010)

Hallo zusammen,

ich habe ein Axis2 Webservice, den ich per PHP Aufrufe und einen Text mit base64_encode($text) übergebe.
Das Problem ist wenn ich Java-seitig den Base64 String mit Ostermillers Base64 decodiere, der Text dann Umlaute Problem enthält, wie z.B.:

 einfÃ¼gen


Hat jemand eine Idee wie ich das verhindern kann?


Danke


----------



## SlaterB (19. Apr 2010)

verwende einen 
InputStreamReader (Java Platform SE 6)
auf die Quelle als Stream und dann ein anderes Encoding als als Standard bisher verwendet wird,

z.B.UTF8
Supported Encodings


----------



## rbrose (19. Apr 2010)

Kannst du mir ein Beispiel geben?`

Also ich habe hier den Base64 String 

[JAVA=42]
String base64Text = param28.getText();

[/code]

Wie konvertiere ich jetzt base64Text?


----------



## SlaterB (19. Apr 2010)

ich denke du hast
> Ostermillers Base64 decodiere
wo passiert das denn, kommen da nicht bytes raus?


----------



## rbrose (19. Apr 2010)

Sorry falsche Zeile kopiert:

[JAVA=42]
String base64Text = Base64.decode(param28.getText());
[/code]

Jetzt ist im String base64Text das Wort einfÃ¼gen drin :-(
Was muss ich davor oder danach machen?


----------



## SlaterB (19. Apr 2010)

> public static String decode(String string,
> String enc)
> throws UnsupportedEncodingException
> 
> ...


Base64

das mit verschiedenen Encodings testen, wobei ich gar nicht genau weiß ob das das Problem ist


----------



## Wortraum (19. Apr 2010)

Ich vermute mal, das Problem läßt sich so skizzieren:
(Text in UTF-8) ——enc——> (Base64) ——dec——> (Text in ISO-8859-1/CP1252)

Das einfachste ist, ihn gleich richtig zu dekodieren, also von Base64 in UTF-8.

```
String base64Text = Base64.decode(param28.getText(), "UTF-8");
```

Alternativ kann man den Text nachträglich in UTF-8 umwandeln. Das betrachte ich aber eher als Notlösung, zumal das Problem damit nicht allgemein behoben ist, da ein anderer Benutzer oder ein anderes System als Standardkodierung UTF-16 oder ISO-8859-2 oder sonstwas eingestellt haben könnte.

```
String alt = "einfÃ¼gen";
String neu = new String(alt.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(neu); /* => einfügen */
```


----------



## rbrose (19. Apr 2010)

Vielen Dank euch!

Habe es jetzt so gemacht:

[JAVA=42]
String base64Text = Base64.decode(param28.getText(), "UTF8");
[/code]

Und es funktioniert 

@Wortraum
Dein Weg funktioniert auch.


----------



## Wortraum (20. Apr 2010)

Auf der anderen Seite, wo Du den Text in Base64 umwandelst, solltest Du übrigens auch UTF-8 als feste Kodierung angeben, denn andernfalls wird immer der Systemstandard verwendet, der aber nun einmal je nach System verschieden sein kann.


----------

