Android EditText zeigt keine Umlaute

Player2000

Mitglied
Hallo zusammen 🙂

Ich lade einen Text aus einem File, dessen Umlaute, wenn ich ihn in einem EditText anzeige, falsch angezeigt werden (so ein Viereck mit Fragezeichen drin). ???:L
Weiß jemand wie ich das Problem lösen kann? :bahnhof:

Freundliche Grüsse
Stefan
 
Wenn Sonderzeichen (wozu oft auch die Umlaute und das ß gehören) nicht angezeigt werden können,
liegt das an unterschiedlichen Codierungen der Zeichen; zeichen jenseits 0-9 und a-Z benötigen häufig
2 und mehr Bytes, deren Bedeutung zwar genormt ist, aber eben nicht in jeder Norm gleich.
Folge: es kommt zu nicht sinnvoll interpretierbaren Zeichen, die dann einfach mit der
Fragezeichen-Raute angezeigt werden.

Am günstigsten ist es, als Zeichensatz immer UTF-8 zu benutzen. Leider wird oft vergessen, das
explizit anzugeben. Ist auf den beteiligten Rechnern dann ein unterschiedliches Charset verwendet
worden, gibt es diesen ärgerlichen Datenmüll.

Hier mal zwei Funktionen, mit denen man an den Codierungen schrauben kann:

Java:
String text = ...

byte[] byteArray = text.getBytes("UTF-8");
String utfText = new String( byteArray, "UTF-8" );
 
Ich benutze bereits UTF-8, die Frage ist, ob das File das geladen wird auch in UTF-8 ist, kann man das irgendwie abfragen?

Hier ist noch der Code der betroffenen Methode:
Java:
private String getText(File f) {
	FileReader fr;
	try {
           fr = new FileReader(f);
           // fr.getEncoding() returns "UTF-8"
	} catch (FileNotFoundException e) {
		return null;
	}
	String content = "";
	int c;
	try {
		while ((c = fr.read()) != -1)
			content += (char) i;
	} catch (IOException e) {
		return null;
	}
	try {
		fr.close();
	} catch (IOException e) {}
	return content;
}
 
Zuletzt bearbeitet:
Kommt auf die Quelle des Textfiles an.
Manche Dokumente haben Meta-Informationen, da ist das Format angegeben. Aber vermutlich eher nicht.
Häufig erraten Editor-Programme anhand der vorkommenden Sonderzeichensequenzen nur, welche Codierung
da verwendet wurde, und wandeln diese in ihr Codierschema um. So etwas müsstest du dann auch machen.

Wenn die Quelle immer die gleiche ist, lässt sich das zum Glück ja ziemlich schnell durch Probieren mit einem
Testtext feststellen und entsprechend durch Angabe der Formate umwandeln.
 
Was häufig hilft, wenn ein File mit Sonderzeichen von einem Windows-PC stammt, das offenbar nicht UTF-8 codiert ist:

Java:
try {
    InputStream is = this.getAssets().open("data.txt");    // z.B aus dem App-internen Ordner assets
    BufferedReader br = new BufferedReader(new InputStreamReader(is,"windows-1252"));
    String zeile;
    while ( (zeile = br.readLine()) != null ) {
        // irgendwas mit zeile anstellen
    }
} catch (IOException e) { e.printStackTrace(); }

Zu Zeile 2: Eclipse speichert unter Windows im Cp-1252-Format, wenn man nicht zu Beginn der
Eingabe etwas anderes (z.B. UTF-8) vorgegeben hat. Benutzt man ein solches File, erhält man
dann für die Sonderzeichen die Rauten mit Fragezeichen in der Ausgabe, sofern man nicht angibt,
dass die Daten in Cp1252 vorliegen.
 

Neue Themen


Zurück
Oben