Base64_decode Umlaute Problem.

rbrose

Mitglied
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
 
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?
 
ich denke du hast
> Ostermillers Base64 decodiere
wo passiert das denn, kommen da nicht bytes raus?
 
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?
 
public static String decode(String string,
String enc)
throws UnsupportedEncodingException

Decode a Base64 encoded String. Characters that are not part of the Base64 alphabet are ignored in the input.

Parameters:
string - The data to decode.
enc - Character encoding to use when converting to and from bytes.
Base64

das mit verschiedenen Encodings testen, wobei ich gar nicht genau weiß ob das das Problem ist
 
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.
Java:
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.
Java:
String alt = "einfügen";
String neu = new String(alt.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(neu); /* => einfügen */
 
Zuletzt bearbeitet:
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.
 
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.
 

Neue Themen


Zurück
Oben