2016-04-08 9 views
0

Ich habe diesen Code:Java UTF-8-Codierung

BufferedWriter w = Files.newWriter(file, Charsets.UTF_8); 
w.newLine(); 
StringBuilder sb = new StringBuilder(); 
sb.append("\"").append("éééé").append("\";") 
w.write(sb.toString()); 

Aber es funktioniert nicht. Am Ende hat meine Datei keine UTF-8-Codierung. Ich habe versucht, dies zu tun, wenn das Schreiben:

w.write(new String(sb.toString().getBytes(Charsets.US_ASCII), "UTF8")); 

Es machte Fragezeichen überall in der Datei erscheinen ...

Ich fand, dass es ein Fehler in Bezug auf der Anerkennung des ursprünglichen BOM charcater (http://bugs.java.com/view_bug.do?bug_id=4508058) war, so Ich habe versucht, die BOMInputStream-Klasse zu verwenden. Aber gibt immer false zurück, also denke ich, dass mein Problem nicht BOM verwandt ist vielleicht?

Wissen Sie, wie ich meine Datei in UTF-8 kodieren kann? Wurde das Problem in Java 8 gelöst?

+1

Ich finde es schwierig zu verstehen, was Ihr tatsächliches Problem ist. Bitte zeigen Sie den echten Code, die Eingabe und die Ausgabe. UTF-8 funktioniert gut in Java, und 'sb.toString(). GetBytes (Charsets.US_ASCII)' erzeugt natürlich viele Fragezeichen, da US_ASCII nur Zeichen 0 .. 127 unterstützt, alles andere ist ungültig und wird durch ersetzt ein Fragezeichen. Auch die Verwendung von Stücklisten mit UTF-8 wird nicht empfohlen. –

+0

Sicher funktioniert es. Wenn Ihr 'BufferedWriter' erstellt wurde, können Sie einfach' w.write ("Hallo, äöå"); w.close(); 'und ich garantiere, dass die Datei UTF-8 kodiert sein wird. – Kayaman

+0

"Es wurden überall in der Datei Fragezeichen angezeigt ..." - das Problem liegt also tatsächlich darin, wo Sie die Datei anzeigen. – Gimby

Antwort

1

Sie schreiben UTF-8 korrekt in Ihrem ersten Beispiel

Das Problem ist, dass der Betrachter oder Werkzeug (obwohl Sie redundant einen String aus einem String erstellen) Sie die Datei anzuzeigen verwenden doesn Lese die Datei nicht als UTF-8.

Mischen Sie nicht in ASCII, das nur alle Nicht-ASCII-Bytes in Fragezeichen konvertiert.