sql >> Databasteknik >  >> RDS >> Mysql

Konvertera fil från Cp1252 till utf -8 java

Ett sätt att verifiera konverteringsprocessen är att konfigurera teckenuppsättningsavkodaren och kodaren för att rädda fel i stället för att tyst ersätta de felaktiga tecknen med specialtecken:

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

Observera att utgångskodaren är konfigurerad för symmetri här, men UTF-8 är kapabel att koda varje unicode-tecken, men om du gör det symmetriskt hjälper det när du väl vill använda samma kod för att utföra andra konverteringar.

Observera vidare att detta inte hjälper om indatafilen är i en annan kodning, men att feltolka byten leder till giltiga tecken. En sak att tänka på är om ingångskodningen "windows-1252" betydde faktiskt systemets standardkodning (och om det verkligen är detsamma). Om du är osäker kan du använda Charset.defaultCharset() istället för Charset.forName("windows-1252") när den faktiskt avsedda konverteringen är defaultUTF-8 .




  1. INET_ATON() och INET_NTOA() i PHP?

  2. SELECT fungerar inte i node.js

  3. Hur hittar jag MySQL my.cnf-platsen

  4. Bygga ternära relationer med hjälp av Laravel Eloquent Relationships