Sonderzeichen

Benji0815

Aktives Mitglied
Mein Programm kann HTML-Seiten von meiner Webseiten herunterladen. Danach werden die darin befindlichen Links so konvertiert, dass ich auch mit der lokal heruntergeladen Version surfen kann.

Leider werden nach dem Konvertieren die Sonderzeichen wie z.B. "?" nicht mehr richtig angezeigt. Ich habe den starken Verdacht, dass es an dem unten stehenden Codeausschnitt liegen muss. Ich vermute der Delimiter verändert die Sonderzeichen.

Kann es sein, dass es an dem Delimiter liegt? Jemand ne Idee, wie ich diesen verändern muss?

Java:
                             InputStream is = null;
                             URL url;
				 
			     try {
			    	url = new URL("file:///" + o.toString());
					is = url.openStream(); 
					 text = new Scanner( is ).useDelimiter( "\\Z" ).next();
				} catch (Exception e) {
					e.printStackTrace();
				}
 
Zuletzt bearbeitet:

Benji0815

Aktives Mitglied
Ich lade Webseiten runter. Diese liegen dann lokal auf meiner Festplatte. Öffne ich eine der heruntergeladenen HTML-Seiten wird alles genauso angezeigt wie es sein soll.

Da ich aber möchte, dass die Links in den heruntergeladenen Seiten nicht auf die original Webseite zeigen, sondern auf die entsprechende heruntergeladene Seite lokal auf meinem Rechner muss ich in den lokalen Html-Dateien die Links konvertieren. Dabei werden eigentlich nur alle relativen Links in absolute umgewandelt.

Nach dem Link konvertieren werden Zeichen wie "?" nicht mehr so angezeigt sondern z.B. so "�x". Oder aus "Rückmelden" wird z.B. "Rückmelden". Bei "Lösungen" wir es komischerweise richtig angezeigt.

Ich wollte jetzt nur wissen, ob der Delimiter den ich verwendet habe, daran schuld sein kann. Ist nämlich das einzige was meiner Meinung nach etwas am gesamten Text ändern kann.

Aber ich such mal weiter, woran es noch liegen könnte.
 
Zuletzt bearbeitet:

Benji0815

Aktives Mitglied
Also ich habe es nochmal getestet, ich habe ein Testklasse geschrieben, die sich mit dem Scanner und dem oben beschriebenen Delimiter ein Webseite runterläd und diese anzeigt.

Das Problem ist wie schon von mir vermutet der von mit gewählte Delimiter. Die Testklasse gibt nämlich auch veränderte Sonderzeichen zurück.

Hat jemand eine Ahnung davon und kann mir sagen wie ich den Delimiter Wert ändern muss um "?" usw. richtig anzeigen zu können?

Java:
public class testsonz {
	static String text;

	public static void main(String[] args){
		InputStream is = null;
		 URL url;
		 
	     try {
	    	url = new URL("Hier die URL einer Webseite eintragen");
			is = url.openStream(); 
			 text = new Scanner( is ).useDelimiter( "\\Z" ).useLocale( Locale.GERMAN ).next();
//useLocale( Locale.GERMAN ) hat keine Auswirkung auf mein Problem, hab es auch ohne getestet!
			 System.out.println(text);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

Oder stimmt mit dem "url.openStream();" was nicht? Es ist mir ein Rätsel?
 
Zuletzt bearbeitet:

madboy

Top Contributor
Das Problem wird (wie so oft :-( ) an einem falschen Encoding liegen. Versuch mal, das Encoding explizit anzugeben. Dazu natürlich das verwenden, welches die Seite auch verwendet.

Beispiel für java-forum.org:
Java:
new Scanner( is, "ISO-8859-1")

Mit Firefox Rechtsklick auf die Seite, dann "Seiteninformationen anzeigen" und bei "Kodierung" schauen.
 

Benji0815

Aktives Mitglied
Danke madboy!

Wenn ich mir den InputStream anschaue stimmt es jetzt. Allerdings muss ich die Encodierung auch irgendwie beim Schreiben in ein neues File angeben, sonst kommt es dort immer noch falsch an.

Ist das auch so einfach zu lösen, dass ich irgendwie dem FileOutputStream die Codierung mitgebe.

Java:
try {
						FileOutputStream schreibeStrom = new FileOutputStream(o.toString());
						 	for (int i=0; i < text.length(); i++){
						 		schreibeStrom.write((byte)text.charAt(i));
						 		
						 	}
						 	schreibeStrom.close();
						 	
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}


Sowas könnte gehen:

Java:
 BufferedWriter out = new BufferedWriter(new OutputStreamWriter
                                 (new FileOutputStream(file),"UTF8"));

Ich würde aber lieber weiter den FileOutputStream wie oben verwenden. Kann ich dem die Encodierung irgendwie mitgeben?
 
Zuletzt bearbeitet:

madboy

Top Contributor
Für das Schreiben von Text gibt's *Writer. Da klappt das normalerweise out of the box mit dem Standardencoding des Betriebssystems.

Java:
FileWriter writer = new FileWriter("filename");
writer.write(text);
writer.flush();
writer.close();

EDIT: warum würdest du lieber den FileOutputStream verwenden?
 

Benji0815

Aktives Mitglied
Mein Programm ist inzwischen sehr komplex und ich möchte sichergehen, dass nachher mein Programm nicht irgendwo was anderes macht, dass sich dann an einer anderen Stelle auswirkt, darum möchte ich möglichst wenig ändern.

Frei nach dem Motto: "never change a running system"

Ich werde jetzt einfach mal ausprobieren was du mir gerade gesagt hast.
 
Zuletzt bearbeitet:

Benji0815

Aktives Mitglied
Sonderzeichen waren immer noch falsch!

Ich habe es jetzt einfach so gemacht:

Java:
BufferedWriter out = new BufferedWriter(new OutputStreamWriter
					        (new FileOutputStream(o.toString()),"UTF8"));

					out.write(text);

					out.close();
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Sonderzeichen wie Euro (€) Java Basics - Anfänger-Themen 4
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
C Wie erkennt man Sonderzeichen im String? Java Basics - Anfänger-Themen 26
J ireport Designer / CSV / Sonderzeichen was läuft falsch Java Basics - Anfänger-Themen 7
W Methoden Konvertierung von Sonderzeichen Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
B Char-Vergleich Sonderzeichen Java Basics - Anfänger-Themen 6
X String Sonderzeichen/Zahlen erkennen Java Basics - Anfänger-Themen 3
E String soll mit Großbuchstaben anfangen und keine Sonderzeichen enthalten Java Basics - Anfänger-Themen 4
M Sonderzeichen werden nicht erkannt Java Basics - Anfänger-Themen 3
A Datentypen Sonderzeichen / Strings ersetzen Java Basics - Anfänger-Themen 3
K Sonderzeichen auf der Windowskonsole ausgeben Java Basics - Anfänger-Themen 8
turmaline Ein regulärer Ausdruck für HTML-Sonderzeichen Java Basics - Anfänger-Themen 3
F Sonderzeichen bei XML Serialisierung nicht konvertieren Java Basics - Anfänger-Themen 7
S String auf Sonderzeichen untersuchen Java Basics - Anfänger-Themen 6
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
M Sonderzeichen beim usedelimiter Java Basics - Anfänger-Themen 4
Z Sonderzeichen in einem String gezeichnen/bearbeiten Java Basics - Anfänger-Themen 6
S Sonderzeichen "§" wird nicht erkannt - Stichwort Encoding! Java Basics - Anfänger-Themen 13
S Sonderzeichen in einem String erkennen Java Basics - Anfänger-Themen 20
M Sonderzeichen in einer Datei auslesen Java Basics - Anfänger-Themen 3
T JOption Pane: Sonderzeichen verbieten? Java Basics - Anfänger-Themen 14
G String und Sonderzeichen Java Basics - Anfänger-Themen 6
T Sonderzeichen in label Java Basics - Anfänger-Themen 4
B Exception bei ImageIO wegen sonderzeichen Java Basics - Anfänger-Themen 11
Semox Umwandlung von Sonderzeichen in HTML-Datei mit Ausgabe Java Basics - Anfänger-Themen 7
D Sonderzeichen ä,ü,ö werden als ? ausgegeben Java Basics - Anfänger-Themen 3
T Sonderzeichen Java Basics - Anfänger-Themen 2
G Sonderzeichen automatisch ändern lassen Java Basics - Anfänger-Themen 23
A XML-Datei erzeugen+Sonderzeichen erlauben Java Basics - Anfänger-Themen 10
L Sonderzeichen automatisch escapen. Java Basics - Anfänger-Themen 7
U Sonderzeichen die zweite Java Basics - Anfänger-Themen 16
H GPS über ser. Schnittst. liefert teilweise Sonderzeichen Java Basics - Anfänger-Themen 3
M RandomAccessFile schreibt Sonderzeichen vor String Java Basics - Anfänger-Themen 2
B String mit Sonderzeichen wie " oder = überprüfen Java Basics - Anfänger-Themen 2
H Datei mit Sonderzeichen Java Basics - Anfänger-Themen 8
G Newline Sonderzeichen aus File entfernen u als String speic? Java Basics - Anfänger-Themen 3
T Robot-Problem mit Sonderzeichen Java Basics - Anfänger-Themen 2
M java sonderzeichen filtern Java Basics - Anfänger-Themen 3
M Konvertierung v. Strings (evtl. mit Sonderzeichen) nach HTML Java Basics - Anfänger-Themen 8
M Char Array mit Sonderzeichen in String umwandeln Java Basics - Anfänger-Themen 21
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
S HTML Sonderzeichen in Unicode wandeln Java Basics - Anfänger-Themen 5
C Sonderzeichen (ä, ö, ü) in JTextArea Java Basics - Anfänger-Themen 9
J Sonderzeichen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben