Le code suivant convertit un fichier de srcEncoding à tgtEncoding:
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
BufferedReader br = null;
BufferedWriter bw = null;
try{
br = new BufferedReader(new InputStreamReader(new FileInputStream(source),srcEncoding));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
} finally {
try {
if (br != null)
br.close();
} finally {
if (bw != null)
bw.close();
}
}
}
--EDIT--
Utilisation de Try-avec-ressources (Java 7):
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
try (
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(source), srcEncoding));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));) {
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
}
}
Non-UTF8? Voulez-vous réduire cela un peu? C'est facile une fois que vous connaissez le codage d'entrée, et essentiellement impossible si vous ne le faites pas. –
quelques considérations, les fichiers sont grands (comme 1GB) donc je ne peux pas les mettre dans un objet String ... –
quel est l'encodage de votre fichier? Si vous êtes sur Linux ou OS X (et un autre Un * x), vous pouvez simplement taper: * file un_fichier * et il vous indiquera l'encodage. Btw, si vous êtes sur Un * x (au moins à la fois Linux et OS X), vous devriez avoir la ligne de commande * iconv *. * "man iconv" * dit: * "Convertir l'encodage de fichiers donnés d'un codage à un autre" *, ce qui fera sans doute un meilleur travail sur un fichier de 1 Go qu'un utilitaire Java auto-écrit. Notez que l'encodage UTF-8 peut représenter chaque code Unicode, ce qui signifie que le fichier * "a des caractères non-utf8" * semble douteux ... – NoozNooz42