Umlaute darstellen

  • Antworten:8
  • Bentwortet
Melanie Schmidt
  • Forum-Beiträge: 18

06.06.2011, 23:42:06 via Website

Hallo,

ich habe ein Problem Umlaute darzustellen.
Was ich in meiner App tun möchte:
Durch einen HTTP Request bekommt man eine xml datei mit Städten drin. Diese Städte sollen in der Liste in einem AlertDialog angezeigt werden, dass der User eine auswählen kann. Nun enhalten die Städte auch Umlaute.

Gibt es eine Möglichkeit die Umlaute dennoch darzustellen oder muss ich alle mit ae,... ersetzen?

Viele Dank schonmal.

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.068

07.06.2011, 01:11:09 via App

Ich kenne Android und Java nicht genug, aber ich vermute, die gelieferten Daten sind in ISO-8859-1 oder CP1252 kodiert und Android arbeitet analog einem modernen Linux mit UTF-8.

Dabei gehe ich davon aus, dass Android UTF-8 verwendet. Sonst wäre es andersherum: Die gelieferten Daten sind UTF-8-kodiert, werden aber von Android als ISO-8859-1 bzw. CP1252 interpretiert.

Eine Umwandlung sollte Java können.

— geändert am 07.06.2011, 01:12:54

Die Tatsache, dass ich paranoid bin, heißt noch lange nicht, sie seien nicht hinter mir her!

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

07.06.2011, 12:28:32 via Website

@Ralph: der erste Absatz ist richtig.

@Melanie:
Erstmal Willkommen im Forum :)
Wie Ralph schon ganz richtig festgestellt hat, hast du es mit einem Kodierungsproblem zu tun;
wenn dein Server die Daten direkt als UTF-8 liefert, sollte alles funktionieren.
Alternativ müsstest du den Input-Stream nach UTF-8 konvertieren, InputStreamReader kann sowas, wenn das Encoding der Quelle bekannt ist.

Antworten
Markus B.
  • Forum-Beiträge: 636

07.06.2011, 23:27:20 via Website

and dev
@Ralph: der erste Absatz ist richtig.

@Melanie:
Erstmal Willkommen im Forum :)
Wie Ralph schon ganz richtig festgestellt hat, hast du es mit einem Kodierungsproblem zu tun;
wenn dein Server die Daten direkt als UTF-8 liefert, sollte alles funktionieren.
Alternativ müsstest du den Input-Stream nach UTF-8 konvertieren, InputStreamReader kann sowas, wenn das Encoding der Quelle bekannt ist.

Hi,
konvertieren muss du doch eigentlich nichts. Solange du den String mit dem richtigen encoding einließt. Nach dem Einlesen ist der entsprechende String ja byte code und quasi "encoding neutral".
Beispiel: Server liefert ISO-8859-1 -> String mit ISO-8859-1 lesen -> String ist dann von Java richtig in byte code umgewandelt worden -> output was du willst.

Gruß,
Markus

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.06.2011, 09:35:50 via Website

Server liefert ISO-8859-1 -> String mit ISO-8859-1 lesen -> String ist dann von Java richtig
...nach UTF-8 konvertiert worden.
Das meinte ich.

Melanie Schmidt

Antworten
Melanie Schmidt
  • Forum-Beiträge: 18

08.06.2011, 18:41:04 via Website

vielen Dank für die viele Antworten :)
Dass das an der Server encodieren liegen könnte wäre mir nicht eingefallen.
Ich werde gleich mal nachfragen wie die ist und das mal ausprobieren.

lg

Antworten
Markus B.
  • Forum-Beiträge: 636

08.06.2011, 20:18:18 via Website

Hi,
du kannst dir das encoding auch im Browser anzeigen lassen. Dazu kann ich für den Firefox das Addon "firebug" empfehlen und im Chrome gehste einfach Einstellungen -> Tools -> Entwicklertools. Jedes Tool hat einen Reiter Network bzw. Netzwerk. Wenn du den anklickst musst die die Seite evtl. neuladen und dann kannst du dir den Header vom Response anschauen. Dort steht dann z.B. folgendes Content-Type:text/html;charset=UTF-8. Dann weißt du welches encoding der Server ausliefert.

Gruß,
Markus

Melanie Schmidt

Antworten
Melanie Schmidt
  • Forum-Beiträge: 18

13.06.2011, 22:05:27 via Website

Danke :)

Hier ist noch meine Codelösung, wens interessiert:

1HttpPost request = new HttpPost("MyUrl");
2HttpClient httpClient = new DefaultHttpClient();
3HttpResponse response = httpClient.execute(request);
4
5HttpEntity entity = response.getEntity();
6InputStream instream = entity.getContent();
7BufferedReader br = new BufferedReader(new InputStreamReader(instream,"iso-8859-1"),8);

Antworten
Markus B.
  • Forum-Beiträge: 636

13.06.2011, 22:59:27 via Website

Hi,
du kannst das noch ein bisschen "hübscher" schreiben:

1final HttpEntity entity = response.getEntity();
2final String content = EntityUtils.toString(entity, "ISO-8859-1");

Gruß,
Markus

Antworten