2012-04-10 130 views
7

Necesito cambiar programáticamente la codificación de un conjunto de scripts * nix a UTF-8 desde Java. No les escribiré nada, así que estoy tratando de encontrar cuál es la forma más fácil de hacerlo. Los archivos no son demasiados y no son tan grandes. Pude:¿Cambiar la codificación del archivo existente con Java?

  • "escribir" una cadena vacía utilizando un OutputStream con UTF-8 como codificación
  • Puesto que ya estoy usando FileUtils (de Apache Commons), que podía leer | escribir los contenidos de las mismas archivos, pasando UTF-8 como codificación

No es un gran problema, pero ¿alguien se ha encontrado con este caso antes? ¿Hay algún inconveniente en ambos enfoques?

+2

El archivo completo * debe ser leído y re-escrito * excepto en el caso de archivos ASCII limpios normales de 7 bits (y similares) que no requieren una lista de materiales inicial. La lista de materiales cambiará la secuencia así como cualquier cambio de codificación. –

+0

Pero la codificación predeterminada de Unixes es UTF-8, creo. ¿Cuál es la codificación de tus scripts? – Cratylus

+0

@ user384706 Quizás sea más apropiado decir que las secuencias que no son de BOM se toman como UTF-8 en muchas aplicaciones de "texto" ... es más apropiado hablar de una "codificación predeterminada" en relación con un idioma/biblioteca/API. –

Respuesta

11

Conforme a lo solicitado, y ya que estás usando campos comunes io, aquí es ejemplo de código (comprobación de errores al viento):

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

¿Es necesario el 'UTF-8'? Creo que la codificación predeterminada de Java es' UTF-8' de todos modos – Cratylus

+3

, hay un par de cosas que decir aquí. En primer lugar, es poco probable que tio sea utf8, y segundo, dado que este código trata de codificaciones, es mejor ser explícito. http://stackoverflow.com/questions/1006276/what-is-the-default-encoding-of-jvm – daveb

+0

ADVERTENCIA: por alguna razón, esto corta archivos de más de varios KB, esencialmente eliminando el contenido del archivo más allá de un cierto punto –

Cuestiones relacionadas