Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chuyển đổi tệp từ Cp1252 sang utf -8 java

Một cách để xác minh quá trình chuyển đổi là định cấu hình bộ mã hóa và giải mã bộ ký tự để khắc phục lỗi thay vì âm thầm thay thế các ký tự bị lỗi bằng các ký tự đặc biệt:

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

Lưu ý rằng bộ mã hóa đầu ra được định cấu hình cho đối xứng ở đây, nhưng UTF-8 có khả năng mã hóa mọi ký tự unicode, tuy nhiên, làm điều đó đối xứng sẽ hữu ích khi bạn muốn sử dụng cùng một mã để thực hiện các chuyển đổi khác.

Ngoài ra, hãy lưu ý rằng điều này sẽ không hữu ích nếu tệp đầu vào ở một mã hóa khác nhưng việc diễn giải sai các byte dẫn đến các ký tự hợp lệ. Một điều cần xem xét là liệu mã hóa đầu vào "windows-1252" thực sự có nghĩa là mã hóa mặc định của hệ thống (và liệu điều đó có thực sự giống nhau hay không). Nếu nghi ngờ, bạn có thể sử dụng Charset.defaultCharset() thay vì Charset.forName("windows-1252") khi chuyển đổi thực sự dự định là 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. Khoảng cách không gian Mysql sử dụng POINT - Không hoạt động

  2. Tuyên bố cập nhật MySQL để lưu trữ các vị trí xếp hạng

  3. Điểm yếu của phương pháp xác thực người dùng này là gì?

  4. Tôi có thể đếm số phiên để xác định số người trực tuyến không?

  5. Laravel phàn nàn về truy vấn với các tham số được đặt tên trùng lặp