# HTML Code, Umlaute werden nicht richtig dargestellt



## Waffeln (26. Aug 2014)

Hallo Leute,
ich habe da ein Problem. Und zwar will ich mit Hilfe meines Programms eine Seite im Internet durchsuchen und teile von Text als String bearbeiten. Wie auch immer, ich will hier ja jetzt nicht erzählen was mein Programm alles kann, ich brauche nur Hilfe für ein kleines Problem.

Der folgende Code holt mir den Quelltext einer Internetseite:


```
public String fetchPage(String url) {
		StringBuilder sb = new StringBuilder();
		  
		try {
			Scanner scanner = new Scanner(new URL(url).openStream(), "utf-8");
			while (scanner.hasNextLine()) {
		  	sb.append(scanner.nextLine() + "\n");
			}
		scanner.close();		  
		}
		catch (MalformedURLException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	
		String text = sb.toString();

		return text;
	}
```

Das Problem besteht darin, dass die Umlaute nicht richtig "importiert" werden. Für ü steht da z.B &uuml;. Ich hab schon den ganzen tag im Internet nach einer Lösung gesucht um das umzuwandeln, aber nichts passendes gefunden. 
Wenn ich auf der jeweiligen Internetseite den Quelltest anzeigen lasse, werden mir die Umlaute auch nicht richtig angezeigt, aber farblich schonmal markiert. 

Kann mir jemand helfen? ;(


----------



## turtle (26. Aug 2014)

Die Console kann offensichtlich keine UTF-8 Kodierung.

In Eclipse kannst du das im Common-Tab der RunConfiguration umstellen.


----------



## Waffeln (26. Aug 2014)

Hab ich mal auf utf-8 umgestellt, funktioniert nicht.
Dann hab ich mal den Standard (MacRoman) in meinem Programm eingesetzt, funktioniert auch nicht...


----------



## Waffeln (26. Aug 2014)

Ich hab mal testweise ein Codeschnipsel hinzugefügt:


```
System.out.println("äöüÄÖÜ");
```

Und da passt die Ausgabe. Also es muss ja irgendwie an der Eingabe scheitern :bahnhof:


----------



## Ruzmanz (26. Aug 2014)

- Macht Groß- und Kleinschreibung bei dem String einen Unterschied? Ich kenne das nur als "UTF-8".
- Sicher, dass es ein UTF-8 Stream ist? Viele Webseiten verwenden auch ISO-8859-1, wie z.B. das Forum: 
	
	
	
	





```
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
```

PS: Habe die Frage nur überflogen ... &uuml; hat nichts mit der Codierung zu tun. Das wird in HTML als Ü interpretiert. Unabhängig von UTF-8. Wenn die Webseite das direkt im Quelltext stehen hat, muss du es "manuell" ersetzen.


----------



## Maskin (26. Aug 2014)

Nun ja, vielleicht kommen diese Zeichen direkt von der Webseite.
Zeichen	Ersetzung
ä       	&auml;
Ä      	&Auml;
ö	        &ouml;
Ö	        &Ouml;
ü       	&uuml;
Ü      	&Uuml;
ß       	&szlig;

Du könntest diese ja beim parsen wieder ersetzen.


----------



## Waffeln (26. Aug 2014)

Scheint dann wohl wirklich so eingelesen zu werden, aber wie macht das ein Browser? Der kriegt ja auch nur diesen Buchstabenbrei und wandelt ihn in richtige Umlaute um :bahnhof:

Dann werde ich die wohl wirklich erst selbst umwandeln müssen, oder hat hier jemand nen codeschnipsel für mich übrig der das macht? Dost muss ich wohl erstmal googlen :rtfm:

//Edit:
*LÖSUNG*
Danke für die "Hilfe" wäre nach ein paar Tagen wohl selbst drauf gekommen. Hab jetzt einfach alle Umlaute durch richtige ersetzt:


```
gesuchterText = gesuchterText.replace("&auml;","ä");
		gesuchterText = gesuchterText.replace("&Auml;","Ä");
		gesuchterText = gesuchterText.replace("&uuml;","ü");
		gesuchterText = gesuchterText.replace("&Uuml;","Ü");
		gesuchterText = gesuchterText.replace("&ouml;","ö");
		gesuchterText = gesuchterText.replace("&Ouml;","Ö");
		gesuchterText = gesuchterText.replace("&szlig;","ß");
```

Keine Ahnung ob das Effizient ist, aber es funktioniert erstmal.


----------



## Maskin (26. Aug 2014)

Du kannst dann auch deinen finalen String hernehmen und ein replaceAll() machen.

Vielleicht auch interessant für dich StringEscapeUtils.html


----------

