Und dafür musst du einen Reader verwenden, bei dem du Charsets angeben kannst.
Das kannst du z. B. machen mit … Reader reader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8.name());
Oder mit … Scanner sc = new Scanner(new FileInputStream(file), StandardCharsets.UTF_8.name())
Die anderen Reader verwenden immer den Standard deines Betriebssystems, und das kann halt manchmal falsch sein.
Hab jetzt den Scanner verwandt, aber die Ausgabe bleibt leider dieselbe ;(
������
Hab es so gemacht:
Scanner sc = new Scanner(new FileInputStream(file), StandardCharsets.UTF_8.name());
String line;
while((line = sc.nextLine()) != null) {
System.out.println(line);
}```
Gibt es vielleicht noch eine andere Art die Datei einzulesen oder mache ich in meinem Code irgendwas falsch?
Die Frage ist, welches Charset verwendet deine Textdatei denn? Öffne die mal mit einem vernünftigen Editor (Notepad++), der zeigt dir das unten rechts in der Leiste an. In meinem Beispiel habe ich jetzt einfach nur mal UTF-8 gewählt…
edit: Mit dem Scanner kannst du das übrigens komfortabler Einlesen:
jaein - Windows wechselt alle Nase lang irgendwo das Encoding (anstatt es einmal richtig zu machen). Wenn ich mit Unison die Projekte zwischen Windows 7 und Linux abgleiche stolpert Windows über das Encoding. Ich muss ständig darauf achten das ich keine Umlaute verwende. Lustig wird es wenn ich Dateien vom Kunden bekomme - da kann ich nicht einfach den Buchstaben ändern (gerade wenn es mit SVN zusammen hängt).
Grundsätzlich ist es ungünstig irgendwo auf die Default-Einstellung von irgendwas zurück zu greifen (egal ob Win/X/Mac/…). Ich nagle immer alles fest. Ich habe mal von XP (Server) Zeichenketten an Win (Client) übertragen. Im Grund wurde das BS vom Client ausgetauscht (neuer Rechner). Das Programm lief nicht mehr, weil ich die Zeichenkette mit den Default-Encoding bearbeitet habe. Gleiches dann nochmal von 1.1 auf 2.0. Zumindest das Encoding nagle ich inzwischen immer auf UTF-8 fest.
das problem ist weniger das einlesen des files als viel mehr das encoding der ausgabe
es ist leider so das sowohl CMD.exe als auch die PowerShell standardmäßig CP850 nutzen
java intern hingegen unicode/UTF8
und das file selbst wie du geschrieben hast Win-ANSI (WIN1252)
wie gesagt : der wahnsinn des encodings
um jetzt auf CMD.exe mit CP850 eine “korrekte” ausgabe zu erhalten musst du deinem code sagen das er auch eine CP850 ausgabe machen soll
folgender code demonstriert das sehr gut
public class Test
{
public static void main(String[] args) throws Exception
{
System.out.println("ä");
PrintStream ps=new PrintStream(System.out, true, "CP850");
ps.println("ä");
}
}```
unter Win7 ist die ausgabe folgende
õ
ä
vor der korrektur des charsets wird also das "ä" was im source steht "zerstört"
nach anpassung auf das ausgabe-enconding bekommt man dann die korrekte ausgabe
das du für das einlesen keine anpassung vornehmen musst liegt daran das java normalerweise für streams den platform-charset nutzt, und das ist unter windows nun mal Win-1252, was dem encoding des files entspricht
[ot]
ich weis zwar nicht was der code in deiner signatur soll, aber man kann ihn auf den einzeiler verkürzen
```setVisible(!isVisible());```
eine vorherige abfrage ob true oder false ist unnötig wenn du als ergebnis eh ein toggle machst
denn du hast ja sowohl im if als auch im else die exakt gleiche zeile stehen