Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
for ( ... s = in.readline ...){
System.out.println(s);
}
Beinhaltet die Webseite dann "Sonderzeichen" wie z.B. das "ü" dann wird mir dieses wie folgt auf der Konsole ausgegeben:
Lhnen = Lühnen
Wie kann ich diese Sonderzeichen in die "korrekten" Zeichen ersetzen. Ein replace kommt denke ich nicht in Frage da ich nicht alle möglichen Sonderzeichen und deren Bedeutung kenne.
im Konstruktor des InputStreamReaders zum InputStream kannst du ein Encoding/Charset angeben,
versuch da vielleicht einige der Möglichkeiten
US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set
ISO-8859-1 ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
UTF-8 Eight-bit UCS Transformation Format
UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order
UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order
UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark
Ein ähnliches Probleme habe ich auch.
ReadIn ist ein DataInputStream. Der Stream sendet Text als auch Dateien. Um den Text von den Dateien zu trennen gehe ich wie folgt vor.
Ich lese so meine Daten ein:
Code:
byte bml = ReadIn.readByte();
ReadIn.read(amd, 0, bml * 16);
int first = 0;
while ( (first < amd.length) && (amd[first] != 0)){
st += (char) amd[first];
first++;
}
Das Problem ist, das ich das Encoding nicht grundsätzlich umstellen möchte, da ich dann Probleme beim laden der Dateien erwarte. Gibt es eine Möglichkeit jeden einzelnen Buchstaben hier zu encoden?
Bei HTML-Seiten ist es etwas kompliziert. Es gibt einen Content-Type-HTTP-Header, der enthält meist ein charset.
Code:
HTTP/1.1 200 OK
Date: Fri, 13 Feb 2009 22:28:58 GMT
Server: Apache/1.3.34
Expires: Fri, 13 Feb 2009 22:43:58 GMT
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=UTF-8
Und es gibt im HTML-Kopf meist auch noch eine Charset-Angabe.
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-8">
Und beide können sich -- wen wundert's -- unterscheiden und tun das hin und wieder auch. Wenn dem so ist, soll man den Eintrag im HTML bevorzugen.
So bekommst Du die Charset-Angabe aus dem Content-Type-HTTP-Header:
Code:
/** Determines the charset to use from the given URL connection. */
static Charset determineCharset(URLConnection connection) {
final String contentType = connection.getContentType();
Charset cs = Charset.defaultCharset();
if (contentType != null) {
final Pattern p = Pattern.compile(".*;\\s*charset=(.+)");//$NON-NLS-1$
final Matcher m = p.matcher(contentType);
if (m.matches()) {
final String charsetName = m.group(1);
try {
cs = Charset.forName(charsetName);
} catch (IllegalCharsetNameException ex) {
// TODO: Logging; Using default charset due to illegal charset name
} catch (UnsupportedCharsetException ex) {
// TODO: Logging; Using default charset due to unsupported charset
} catch (IllegalArgumentException ex) {
assert false : "The charset cannot be null, here"; //$NON-NLS-1$
}
}
}
return cs;
}
Und wie Du die Charset-Angabe aus dem HTML herausholst, musst Du selbst herausfinden; dafür hab ich nix fertig.