Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Converter arquivo de Cp1252 para utf -8 java


Uma maneira de verificar o processo de conversão é configurar o decodificador e o codificador do conjunto de caracteres para evitar erros em vez de substituir silenciosamente os caracteres errados por caracteres especiais:
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();
    }
}

Observe que o codificador de saída está configurado para simetria aqui, mas UTF-8 é capaz de codificar todos os caracteres unicode, no entanto, fazê-lo simétrico ajudará quando você quiser usar o mesmo código para realizar outras conversões.

Além disso, observe que isso não ajudará se o arquivo de entrada estiver em uma codificação diferente, mas a interpretação incorreta dos bytes leva a caracteres válidos. Uma coisa a considerar é se a codificação de entrada "windows-1252" na verdade significava a codificação padrão do sistema (e se isso é realmente o mesmo). Em caso de dúvida, você pode usar Charset.defaultCharset() em vez de Charset.forName("windows-1252") quando a conversão realmente pretendida é defaultUTF-8 .