Ich habe eine FTP-Client-Klasse, die InputStream zurückgibt und auf die Datei verweist. Ich möchte die Datei Zeile für Zeile mit BufferedReader lesen. Das Problem besteht darin, dass der Client die Datei im Binärmodus zurückgibt und die Datei die ISO-8859-15-Codierung aufweist.
Wenn die Datei / der Stream / was auch immer wirklich ISO-8859-15-kodierten Text enthält, müssen Sie dies nur angeben, wenn Sie den InputStreamReader erstellen:
%Vor% Dann wird readLine()
gültige Strings in der nativen Kodierung von Java erzeugen (das ist UTF-16, nicht UTF-8).
Die ursprüngliche Zeichenfolge befindet sich in ISO-8859-15, daher wird der von Ihrem InputStreamReader gelesene Byte-Stream in dieser Codierung enthalten sein. Also lesen Sie diese Kodierung ein (spezifizieren Sie dies im InputStreamReader-Konstruktor). Das teilt dem InputStreamReader mit, dass der eingehende Bytedatenstrom in ISO-8859-15 enthalten ist, und führt die entsprechenden Byte-zu-Zeichen-Konvertierungen durch.
Jetzt wird es im Standardformat Java UTF-16 sein, und Sie können dann tun, was Sie wollen.
Ich denke, das aktuelle Problem ist, dass Sie es mit Ihrer Standardcodierung lesen (indem Sie keine Codierung in InputStreamReader angeben) und dann versuchen, es zu konvertieren, zu welcher Zeit es zu spät ist.
Die Verwendung von Standardverhalten für diese Art von Klassen endet oft in Trauer. Es ist eine gute Idee, Kodierungen zu verwenden, wo auch immer Sie können, und / oder die VM-Kodierung über -Dfile.encoding
Tags und Links java character-encoding