sql >> Base de Datos >  >> RDS >> Mysql

Convertir archivo de Cp1252 a utf -8 java

Una forma de verificar el proceso de conversión es configurar el decodificador y el codificador del juego de caracteres para que resuelva los errores en lugar de reemplazar silenciosamente los caracteres erróneos con caracteres especiales:

CharsetDecoder inDec=Charset.forName("windows-1252").newDecoder()
  .onMalformedInput(CodingErrorAction.REPORT)
  .onUnmappableCharacter(CodingErrorAction.REPORT);

CharsetEncoder outEnc=StandardCharsets.UTF_8.newEncoder()
  .onMalformedInput(CodingErrorAction.REPORT)
  .onUnmappableCharacter(CodingErrorAction.REPORT);

try(FileInputStream is=new FileInputStream(filepath);
    BufferedReader reader=new BufferedReader(new InputStreamReader(is, inDec));
    FileOutputStream fw=new FileOutputStream(destpath);
    BufferedWriter out=new BufferedWriter(new OutputStreamWriter(fw, outEnc))) {

    for(String in; (in = reader.readLine()) != null; ) {
        out.write(in);
        out.newLine();
    }
}

Tenga en cuenta que el codificador de salida está configurado para la simetría aquí, pero UTF-8 es capaz de codificar todos los caracteres Unicode, sin embargo, hacerlo simétrico ayudará una vez que desee usar el mismo código para realizar otras conversiones.

Además, tenga en cuenta que esto no ayudará si el archivo de entrada está en una codificación diferente, pero malinterpretar los bytes conduce a caracteres válidos. Una cosa a considerar es si la codificación de entrada "windows-1252" en realidad significaba la codificación predeterminada del sistema (y si eso es realmente lo mismo). En caso de duda, puede usar Charset.defaultCharset() en lugar de Charset.forName("windows-1252") cuando la conversión realmente prevista es defaultUTF-8 .