2012-04-10 13 views
7

Ich muss die Kodierung eines Satzes von * Nix-Skripten von Java nach UTF-8 programmatisch ändern. Ich werde ihnen nichts schreiben, also versuche ich herauszufinden, was der einfachste Weg ist, dies zu tun. Die Dateien sind nicht zu viele und sind nicht so groß. Ich kann:Codierung der vorhandenen Datei mit Java ändern?

  • „Schreiben“ eine leere Zeichenfolge einen Output mit UTF-8-Set als Codierung
  • Da ich bereits FileUtils mit (von Apache Commons), konnte ich lesen | schreibe den Inhalt dieser Dateien, übergibt UTF-8 als Codierung

Keine große Sache, aber hat jemand in diesen Fall zuvor gerannt? Gibt es irgendwelche Nachteile auf beiden Wegen?

+2

Die * gesamte Datei gelesen werden müssen und neu geschrieben * außer im Fall von normalen 7-Bit-sauberen ASCII-Dateien (und solchen), die keine Anfangsstückliste benötigen. Die Stückliste verschiebt den Stream sowie alle Codierungsänderungen. –

+0

Aber Unixes Standardcodierung ist UTF-8 Ich glaube.Was ist die Codierung Ihrer Skripte. – Cratylus

+0

@ user384706 Vielleicht ist es angemessener zu sagen, dass Nicht-BOM-Streams von vielen "Text" -Anwendungen als UTF-8 genommen werden ... eine "Standardcodierung" ist besser geeignet, in Beziehung zu einer bestimmten Sprache/Bibliothek zu sprechen/API. –

Antwort

11

Wie gewünscht, und da Sie commons io verwenden, hier ist Beispielcode (Fehler in den Wind Prüfung):

import java.io.File; 
import java.io.IOException; 
import org.apache.commons.io.FileUtils; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     String filename = args[0]; 
     File file = new File(filename); 
     String content = FileUtils.readFileToString(file, "ISO8859_1"); 
     FileUtils.write(file, content, "UTF-8"); 
    } 
} 
+0

Ist 'UTF-8' notwendig? Ich denke, dass Javas Standard-Kodierung' UTF-8' ist. – Cratylus

+3

Es gibt ein paar Dinge, die hier zu sagen sind. Erstens ist der Standardwert wahrscheinlich nicht utf8, und zweitens ist es am besten, explizit zu sein, da es sich bei diesem Code ausschließlich um Codierungen handelt. http://StackOverflow.com/Questions/1006276/what-is-the-default-encoding-of-jvm – daveb

+0

WARNUNG: Aus irgendeinem Grund schneidet dies Dateien länger als mehrere KB, im Wesentlichen löscht den Inhalt der Datei über einen bestimmten Punkt hinaus –

Verwandte Themen