BufferedReader gibt ISO-8859-15 String - konvertieren von UTF16-String?
Habe ich ein FTP-client-Klasse gibt InputStream zeigen Sie die Datei. Ich möchte die Datei zu Lesen, Zeile für Zeile mit dem BufferedReader. Das Problem ist, dass der client gibt die Datei im binary-Modus und die Datei ist ISO-8859-15-Kodierung.
- Ich sehe nicht, wie UTF-8 ist hier mit einbezogen - Java verwendet UTF-16 intern, nicht UTF-8.
- Sorry, es sollte, sagte UTF-16. Behoben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Datei/stream/whatever wirklich enthält ISO-8859-15 codierte Textdatei, die Sie gerade brauchen, um festzulegen, dass beim erstellen der InputStreamReader:
Dann
readLine()
erstellen gültige Zeichenketten in Java die native Zeichencodierung (was ist UTF-16 und nicht UTF-8).?
Zeichen, wieder mit weder Warnung noch die Ausnahme. Ich bin zu einer viel sichereren Verhalten mit Perl in diesen Bereichen, und die Java-Standardeinstellungen sind einfach nur kaputt. Unsere gesamte Codebasis (das Java-Teil, der Perl-Teil) ist gespickt mit fiesen Fehler, weil dieser. Fast macht Lust auf monkey-patch-std-Java-libs. Fast. ☺Versuchen Sie dies:
Den ursprünglichen string in ISO-8859-15, also der byte-stream Lesen, die von Ihrem InputStreamReader wird in dieser Codierung. So Lesen Sie in der Verwendung, dass die Kodierung (geben Sie diese im Konstruktor von InputStreamReader). Das sagt der InputStreamReader, dass der ankommende byte-Strom ist in ISO-8859-15 und nehmen Sie die gewünschte byte-Zeichen Konvertierungen.
Nun wird es in der standard-Java-UTF-16-format, und Sie können dann tun, was Sie wünschen.
Ich denke, das aktuelle problem ist, dass Sie Lesen Sie es mit Ihrem Standard-Codierung (nicht durch Angabe einer Zeichenkodierung in der InputStreamReader), und dann zu versuchen, Sie zu konvertieren, zu welcher Zeit es zu spät ist.
Verwendung von default-Verhalten für diese Art von Klassen, die oft endet in Trauer. Es ist eine gute Idee, um anzugeben, Kodierungen, wo immer Sie können, und/oder die Standard-VM-Codierung über
-Dfile.encoding
Haben Sie versucht: