Unicode beim Lesen und Schreiben per java.io.*

famco

Aktives Mitglied
Hallo,

ich übe gerade in Java und habe mir zur Aufgabe gemacht, mittels FileWriter und FileReader eine Datei zu kopieren. Also eine wirklich einfache Übung:
Java:
FileReader lesen=new FileReader(quelle);
FileWriter schreiben=new FileWriter(ziel);
int x;
while (lesen.ready()) {
       x=lesen.read();
       schreiben.write(x);
}
schreiben.close();
usw.
quelle und ziel sind File-Objekte.
Nur leider muss ich feststellen, das bei Textdateien, die Umlaute nicht richtig kopiert werden. Ich dachte, das das gearde bei Java kein Problem sein sollte wegen Unicode.
Wo ist das Problem, oder: was mache ich falsch ????

Danke
famco
 
Zuletzt bearbeitet:
G

Gastredner

Gast
Java arbeitet mit Unicode, aber womit arbeitet dein Betriebssystem und womit sind die zu kopierenden Textdateien verfasst? Auch können Umlaute und ähnliches falsch dargestellt werden, wenn der verwendete Editor die entsprechende Kodierung nicht kennt.
 

diel2001

Bekanntes Mitglied
Zum schreiben "OutputStreamWriter" verwenden
Java:
new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("")), "UTF-8"));

Zum lesen "InputStreamReader" verwenden
Java:
new BufferedReader(new InputStreamReader(new FileInputStream(new File("")), "UTF-8"));
 
Zuletzt bearbeitet:
G

Gast2

Gast
Höchst warscheinlich ist die Datei nicht in UTF8 sondern in ISO-8859-1 oder so.

Probier mal:
Java:
        FileInputStream fis = new FileInputStream("myfile.txt");
        InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1");
        StringBuilder buffer = new StringBuilder();
        int c;
        while ((c = isr.read()) != -1) {
            buffer.append((char) c);
        }
        String str = buffer.toString();
        System.out.println(str);
 

famco

Aktives Mitglied
ok, Eure Vorschläge funktionieren. Was ich nur nicht verstehe ist: ich lese ein Zeichen und ich schreibe das Zeichen - ohne es zu verändern. Wer verändert wann das Zeichen und vor allem warum? Ich würde erwarten, dass es genau so geschrieben wird, wie ich es gelesen habe ...
famco
 
G

Gast2

Gast
Wenn die Datei selber nicht in UTF8 vorliegt, du sie aber im UTF8 Encoding einließt werden die Zeichen halt falsch interpretiert. Im schlimmsten Fall sind sie halt ungültig.

Windows + Notepad schreiben glaub ich niemals UTF8 files sondern immer nur Dateien im ISO-8859-1 Encoding.

Lad dir mal Notepad++ oder so runter, stell ein das der UTF8 Mode genutzt wird, erstell dir eine Beispiel Datei und probier den Code aus deinem ersten Posting noch mal. Dann wird er funktionieren.
 

famco

Aktives Mitglied
hm, verstehe ich trotzdem nicht. Egal wie der Editor es darstellt, wenn ich ein Byte mit dem Wert x schreibe, erwarte ich auch, das es als Wert x wieder auslese.
Zum Beispiel so:
Java:
package test;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
      File datei=new File ("test.asc");
      FileWriter quelle=new FileWriter(datei);
      quelle.write(120);
      quelle.write(17);
      quelle.close();
      FileReader ziel=new FileReader(datei);
      System.out.println(ziel.read());
      System.out.println(ziel.read());
      ziel.close();
    }
}
Das geht. Aber warum ich keine Datei kopieren kann durch byteweises Lesen und Schreiben ist mir unklar.
In c hatte ich damit nie Probleme. Irgendetwas habe ich wohl grundsätzlich noch nicht verstanden beim FileIO in Java....

famco
 
G

Gastredner

Gast
Du verwendest Reader und Writer, die eingelesene Bytes automatisch als Zeichen interpretieren. Verwende Input- und OutputStreams, diese arbeiten Byte-basiert.
 
N

nichtredner

Gast
FileReader + FileWriter lesen Byteströme und konvertieren immer entweder 8 oder 16 Bit in ein Zeichen. Beim schreiben passiert das gleiche, nur umgekehrt. Welche Bitfolgen in welche Zeichen umgewandelt werden - und umgekehrt - ist immer abhängig von der verwendeten Codierung. Hier gibt es UTF8 und son gedöns. Byte für Byte kopierst du am besten mit einem FileInputStream, bzw. BufferedInputStream, und den entsprechenden output streams.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Salo Zusammengesetztes Unicode Java Basics - Anfänger-Themen 15
D Unicode im Hexadezimalsystem Java Basics - Anfänger-Themen 1
A Input/Output Input eingabe in unicode übersetzen Java Basics - Anfänger-Themen 3
F charAt-Methode liefert falsche Unicode-Werte Java Basics - Anfänger-Themen 8
U Unicode - ? Java Basics - Anfänger-Themen 3
P Zahlen als Unicode darstellen Java Basics - Anfänger-Themen 2
0 "Invalid Unicode" Java Basics - Anfänger-Themen 2
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
A Unicode Java Basics - Anfänger-Themen 3
K Java String UNICODE in DB UTF-8 Feld einfügen Java Basics - Anfänger-Themen 3
kulturfenster Char und Unicode Java Basics - Anfänger-Themen 2
J Unicode-Textdatei lesen Java Basics - Anfänger-Themen 7
H short in unicode umwandeln Java Basics - Anfänger-Themen 5
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
G ASCII -> Unicode ? Java Basics - Anfänger-Themen 5
R Problem bei Ausgabe von Unicode-Zeichen Java Basics - Anfänger-Themen 6
B Unicode Java Basics - Anfänger-Themen 2
G Aus int das unicode char zeichen lesen Java Basics - Anfänger-Themen 3
D Unicode für mathematische/statistische Zeichen. Java Basics - Anfänger-Themen 3
T Textdateien mit Unicode-Zeichen kopieren Java Basics - Anfänger-Themen 2
saxman Unicode aus Textdatei einlesen und wieder abspeichern Java Basics - Anfänger-Themen 13
D Unicode in Html Java Basics - Anfänger-Themen 4
I Probleme mit String Byte[] und Unicode Java Basics - Anfänger-Themen 15
R Unicode ausgeben: für b "u0062" ausgeben Java Basics - Anfänger-Themen 5
I Zahlen in Unicode konvertieren Java Basics - Anfänger-Themen 37
G mit Strings rechnen (Unicode) Java Basics - Anfänger-Themen 15
M Buchstabe zu Unicode Java Basics - Anfänger-Themen 3
M Byte InputStream zu Zeichenformat Unicode bzw String konvert Java Basics - Anfänger-Themen 5
S HTML Sonderzeichen in Unicode wandeln Java Basics - Anfänger-Themen 5
T Unicode StringBuffer -> String = unleserlich Java Basics - Anfänger-Themen 7
S HTML mit num. Unicode Notation (was:Probleme bei Encoding) Java Basics - Anfänger-Themen 7
G Unicode in Java Java Basics - Anfänger-Themen 2
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
S Fehler beim Programm Java Basics - Anfänger-Themen 2
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
Avalon Programmierstil beim Mocken Java Basics - Anfänger-Themen 45
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
J Hilfe beim verstehen Java Basics - Anfänger-Themen 3
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
L Anfänger braucht Hilfe - Stecke beim Lernen fest Java Basics - Anfänger-Themen 10
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
W Hilfe beim Chat Programm Java Basics - Anfänger-Themen 14
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben