sql >> Database teknologi >  >> RDS >> Mysql

Konverter fil fra Cp1252 til utf -8 java

En måde at verificere konverteringsprocessen på er at konfigurere tegnsæt-dekoderen og -koderen til at redde ud for fejl i stedet for lydløst at erstatte de fejlagtige tegn med specialtegn:

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();
    }
}

Bemærk, at output-encoderen er konfigureret til symmetri her, men UTF-8 er i stand til at kode hvert unicode-tegn, men at gøre det symmetrisk vil hjælpe, når du vil bruge den samme kode til at udføre andre konverteringer.

Bemærk endvidere, at dette ikke hjælper, hvis inputfilen er i en anden kodning, men fejlfortolkning af bytes fører til gyldige tegn. En ting at overveje er, om input-kodningen "windows-1252" mente faktisk systemets standardkodning (og om det virkelig er det samme). Hvis du er i tvivl, kan du bruge Charset.defaultCharset() i stedet for Charset.forName("windows-1252") når den faktisk tilsigtede konvertering er defaultUTF-8 .




  1. MySQL vælg DATETIME svarende til op til minuttet

  2. Fejl ved installation af Psychopg2 på MacOS 10.9.5

  3. MySQL Spørgsmål om planlægning

  4. Importer SQL-fil til mysql