2010-12-08 4 views
4

Ich muss die Textdatei in den String konvertieren, den ich schließlich als Input-Parameter (Typ InputStream) in IFile.create (Eclipse) setzen sollte. Auf der Suche nach dem Beispiel oder wie man das macht, aber immer noch nicht herausfinden kann ... brauche deine Hilfe!Datei mit bekannter Kodierung nach UTF-8 konvertieren

nur zum Testen, ich habe versucht ursprüngliche Textdatei auf UTF-8 mit diesem Code

FileInputStream fis = new FileInputStream(FilePath); 
InputStreamReader isr = new InputStreamReader(fis); 

Reader in = new BufferedReader(isr); 
StringBuffer buffer = new StringBuffer(); 

int ch; 
while ((ch = in.read()) > -1) { 
    buffer.append((char)ch); 
} 
in.close(); 


FileOutputStream fos = new FileOutputStream(FilePath+".test.txt"); 
Writer out = new OutputStreamWriter(fos, "UTF8"); 
out.write(buffer.toString()); 
out.close(); 

aber auch gedacht, die letzte * .test.txt Datei hat UTF-8-Codierung verschlüsselte konvertieren die Zeichen Innen sind beschädigt.

+0

BTW, schreiben Sie ein Eclipse-Plugin? Warum benutzen Sie 'IFile'? –

+0

Ja, das ist im Eclipse-Plugin! – JackBauer

Antwort

9

Sie müssen die Codierung InputStreamReader mit dem Parameter Charset angeben.

        // ↓ whatever the input's encoding is 
Charset inputCharset = Charset.forName("ISO-8859-1"); 
InputStreamReader isr = new InputStreamReader(fis, inputCharset)); 

Dies funktioniert auch:

InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1")); 

Siehe auch:

SO suchen, wo ich all diese Links gefunden: https://stackoverflow.com/search?q=java+detect+encoding


Sie den Standard-charset bekommen - das ist die JVM stammt aus dem System läuft auf - zur Laufzeit über Charset.defaultCharset().

+0

Vielen Dank für die Antwort, aber ich bekomme Encoding von isr (isr.getEncoding()), weiß es nicht schon, was die Codierung ist? – JackBauer

+0

Bin ich richtig, dass ich wie tun muss: InputStreamReader isr1 = new InputStreamReader (fis); Zeichensatz inputCharset = Zeichensatz.fürName (isr1.getEncoding()); InputStreamReader isr = neuer InputStreamReader (fis, inputCharset)); ? – JackBauer

+0

@Jack: Nein, so funktioniert es nicht. Es gibt wirklich keine Möglichkeit, die Codierung eines beliebigen Textabschnitts zu kennen. Wenn Sie die Kodierung des 'InputStreamReader' nicht angegeben haben, wird der Leser die ** Standard ** -Kodierung haben (daher wird' isr.Encoding() 'zurückgeben). –

Verwandte Themen