with - java write csv file utf 8



Problem beim Speichern von Zeichen in Datei (1)

Zeichen 56000 ist U + DAC0, das kein gültiges Unicode-Zeichen ist , es ist ein hohes Ersatzzeichen . Sie sollen in einem Paar verwendet werden, um Zeichen außerhalb des 16 Bit breiten BMP anzuzeigen .

Ich hatte ein Problem mit der Serialisierung und Deserialisierung von Unicode-Zeichen. Hier ist ein Beispielprogramm, das ein Zeichen in eine Datei schreibt und dann versucht es zu lesen. Geschriebene und gelesene Zeichen ( ch und ch2 ) sind unterschiedlich. Irgendwelche Vorschläge, warum ich dieses Verhalten bekomme?

public class MainClass {
    public static void main(String[] args) {
        try {
            File outfile = new File("test.txt");
            FileOutputStream fos = new FileOutputStream(outfile);
            OutputStreamWriter writer = new OutputStreamWriter(fos, "UTF-16");
            FileInputStream fis = new FileInputStream(outfile);
            InputStreamReader reader = new InputStreamReader(fis, "UTF-16");

            char ch = 56000;
            System.out.println(Integer.toBinaryString(ch));
            writer.write(ch);
            writer.close();

            char ch2 = (char) reader.read();
            System.out.println(Integer.toBinaryString(ch2));
            reader.close();

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

UPD: Empirisch gefunden, dass dies nur für Nummern aus dem Bereich 55296-57343 passiert.





char