Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Konversi file dari Cp1252 ke utf -8 java

Salah satu cara untuk memverifikasi proses konversi adalah dengan mengonfigurasi dekoder charset dan encoder untuk menyelamatkan kesalahan alih-alih secara diam-diam mengganti karakter yang salah dengan karakter khusus:

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

Perhatikan bahwa encoder keluaran dikonfigurasikan untuk simetri di sini, tetapi UTF-8 mampu mengkodekan setiap karakter unicode, namun, melakukannya secara simetris akan membantu setelah Anda ingin menggunakan kode yang sama untuk melakukan konversi lainnya.

Selanjutnya, perhatikan bahwa ini tidak akan membantu jika file input dalam penyandian yang berbeda tetapi salah menafsirkan byte mengarah ke karakter yang valid. Satu hal yang perlu dipertimbangkan adalah apakah pengkodean input "windows-1252" sebenarnya berarti pengkodean default sistem (dan apakah itu benar-benar sama). Jika ragu, Anda dapat menggunakan Charset.defaultCharset() bukannya Charset.forName("windows-1252") ketika konversi yang sebenarnya dimaksudkan adalah 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. Percepat Pembaruan MySQL/Sisipkan Pernyataan

  2. Bagaimana menemukan nama tabel yang gambarnya dipilih secara acak?

  3. Cegah penyisipan tanggal dan waktu ke database

  4. Gunakan Database Relasional MySQL di Ubuntu 10.10 (Maverick)

  5. Sequelize bulkCreate() mengembalikan nilai NULL untuk kunci utama