2017-12-18 8 views
-3

Ich verwende den folgenden Code, um eine große Textdatei zeilenweise zu verarbeiten. Das Problem ist, dass ich eine andere Sprache als Englisch verwende, um genau zu sein. Viele der Zeichen erscheinen in der Ausgabedatei als . Wie kann ich das beheben?BufferedWriter gibt seltsame Zeichen aus, wenn sie in einer neuen Datei gespeichert werden

Die Datei befindet sich in ANSI, aber dies scheint kein mit InputStreamReader kompatibler Codierungstyp zu sein. Für welchen Kodierungstyp sollte ich die Originaldatei speichern?

try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME))) { 

String line; 
try { 
    try (
    InputStream fis = new FileInputStream("C:\\Users\\marti\\Documents\\Software Projects\\Java Projects\\TwitterAutoBot\\src\\main\\resources\\EH.Txt"); InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); BufferedReader br = new BufferedReader(isr); 
) { 
    while ((line = br.readLine()) != null) { 
    // Deal with the line 

    String content = line.substring(line.lastIndexOf(" ") + 1); 
    System.out.println(content); 

    bw.write("\n\n" + content); 

    } 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

// bw.close(); 

} catch (IOException e) { 

e.printStackTrace(); 

} 
+1

Welche Codierung verwendet Ihre Eingabedatei? –

+0

@GregKopff Es ist in ANSI. – santafebound

+1

@MartinErlic Wenn es "ANSI" ist, * warum * hast du ** 'UTF-8' ** in deinem Code angegeben? --- Wenn es ['ANSI'] ist (https://en.wikipedia.org/wiki/ANSI_character_set), ist der Geschmack von [erweitertem ANSI] (https://en.wikipedia.org/wiki/Extended_ASCII) es? – Andreas

Antwort

1

Sie müssen die InputStreamReader/OutputStreamWriter Konstrukteuren verwenden, die eine Charset nehmen. Der Konstruktor, den Sie verwenden, verwendet den Standardzeichensatz für Ihre Plattform, der offensichtlich nicht das ist, was Sie benötigen.

Sie müssen sicherstellen:

Wenn Sie mit Java 8 oder höher, können Sie eine der Bequemlichkeit Methoden in Files verwenden dass Sie die Eingabedatei mit dem richtigen Zeichensatz lesen und eine Datei in einem Zeichensatz schreiben, der die Zeichen unterstützt Sie versuchen zu schreiben. UTF-8 ist ein geeignetes Ausgabedateiformat.

0

Ich löste dies durch Codierung mit Cp1252 anstelle von UTF-8, weil die Datei in ANSI codiert wurde.

Verwandte Themen