Saya benar-benar tidak tahu banyak tentang operasi IO. . . Saya juga memiliki sedikit pengetahuan tentang coding dan karakter yang kacau. . . Hari ini saya menemukan persyaratan untuk mengonversi penyandian file dan mengembalikan string yang disandikan, seperti penyandian GBK asli, dikonversi ke UTF-8
Diantaranya, kelas BytesEncodingDetect tidak akan diposting. Terutama digunakan untuk mendapatkan format pengkodean file.
Saya pertama kali mencoba memodifikasi metode pengkodean langsung di file sumber dan menggunakan URLEncoder dan URLDecoder untuk konversi, tetapi masih tidak berhasil. Kata terakhir dari angka ganjil dalam bahasa Cina kacau.
Baidu mencari solusi, tapi gagal, jadi mereka harus mengadopsi ide saya: pertama baca konten file sumber, simpan di StringBuffer, lalu hapus file sumber, lalu buat file baru, lalu simpan di file lain. bentuk pengkodean.
Periksa efek pengkodean: Hati-hati untuk tidak memeriksa efek di Eclipse. Eclipse hanya melihatnya dalam bentuk pengkodean, sehingga Anda dapat melihat file HTML di sisi browser. Untuk melihat pengkodean yang ditentukan, Anda dapat mengklik kanan --- pengkodean untuk menentukan apakah itu berhasil.
Copy kode kodenya sebagai berikut:
paket com.test;
impor java.io.BufferedReader;
impor java.io.BufferedWriter;
impor java.io.File;
impor java.io.FileInputStream;
impor java.io.FileOutputStream;
impor java.io.InputStream;
impor java.io.InputStreamReader;
impor java.io.OutputStream;
impor java.io.OutputStreamWriter;
impor java.net.URLDecoder;
impor java.net.URLEncoder;
Transkode kelas publik {
enkode BytesEncodingDetect pribadi = BytesEncodingDetect baru();
Transkode publik() {
}
/**
* Konversi kode
* @param toCharset Pengkodean yang akan dikonversi
* @param path Jalur file yang akan dikonversi
* @kembali
* @throwsException
*/
pengkodean String publik (String toCharset, jalur String) memunculkan Pengecualian{
File srcFile = File baru(jalur);
int indeks = encode.detectEncoding(srcFile);
String charset = BytesEncodingDetect.javaname[index];
// Pengkodeannya sama, tidak perlu transkode
if (charset.equalsIgnoreCase(toCharset)) {
return "Pengkodeannya sama, tidak diperlukan konversi";
}
InputStream di = FileInputStream baru(jalur);
BufferedReader br = BufferedReader baru(
InputStreamReader baru(dalam, rangkaian karakter));
StringBuffer sb = StringBuffer baru();
Tali s1;
while ((s1=br.readLine())!=null) {
String s = URLEncoder.encode(s1, toCharset);
sb.append(s+"/r/n");//Satu baris + pengangkutan kembali
}
br.close();
srcFile.delete();//Hapus file asli
//Tulis ulang file dengan pengkodean baru dan kembalikan nilainya
File newfile = File baru(jalur);//Buat ulang file asli
file baru.createNewFile();
OutputStream keluar = FileOutputStream baru(file baru);
Penulis OutputStreamWriter = OutputStreamWriter baru(keluar, toCharset);
BufferedWriter bw = BufferedWriter baru(penulis);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
Hasil string = URLDecoder.decode(sb.toString(), toCharset);
bw.flush();//Flash ke dalam file
bw.close();
hasil pengembalian;
}
}