Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Konwertuj plik z Cp1252 na utf-8 java

Jednym ze sposobów weryfikacji procesu konwersji jest skonfigurowanie dekodera i kodera zestawu znaków do unikania błędów zamiast cichego zastępowania błędnych znaków znakami specjalnymi:

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

Zauważ, że koder wyjściowy jest tutaj skonfigurowany pod kątem symetrii, ale UTF-8 jest w stanie zakodować każdy znak Unicode, jednak zrobienie tego symetrycznie pomoże, gdy będziesz chciał użyć tego samego kodu do wykonywania innych konwersji.

Co więcej, zauważ, że to nie pomoże, jeśli plik wejściowy jest w innym kodowaniu, ale błędna interpretacja bajtów prowadzi do prawidłowych znaków. Jedną z rzeczy do rozważenia jest to, czy kodowanie wejściowe "windows-1252" w rzeczywistości oznaczało domyślne kodowanie systemu (i czy to naprawdę to samo). W razie wątpliwości możesz użyć Charset.defaultCharset() zamiast Charset.forName("windows-1252") kiedy faktycznie zamierzona konwersja to defaultUTF-8 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Injection - Użyj zapytania SELECT do UPDATE/DELETE

  2. SQL DML:Nieprawidłowa wartość daty (MySQL)

  3. Jak przywrócić bazę danych podwójnie zakodowaną przez mysqldump

  4. podczas inicjowania PDO - czy powinienem zrobić:charset=UTF8 czy charset=UTF8MB4?

  5. Próbuję zrozumieć, dlaczego używałbyś tego typu konfiguracji bazy danych