Masalah kode sampah di java
Baru -baru ini, ketika melakukan proyek, saya sering menemukan masalah kode yang kacau di Java, jadi saya meluangkan waktu untuk memilah masalah kode yang kacau dan bagaimana menghadapinya. Di sini saya telah menyusunnya.
menganalisa
Pengkodean dan decoding
Pengkodean adalah untuk mengubah karakter menjadi byte, dan decoding adalah untuk mengubah byte menjadi karakter.
Aliran byte dan aliran karakter
File membaca dan menulis semuanya diimplementasikan melalui aliran byte. Bahkan jika ada aliran karakter di Java, lapisan yang mendasarinya masih menggunakan aliran byte.
Masalah kode sampah terjadi
Karakter yang paling sering digunakan dalam Java adalah karakter. Saat kita membaca file ke dalam memori dan menampilkannya di konsol (stream byte ---> stream karakter), kita perlu menggunakan decoding. Jika file adalah pengkodean UTF-8 dan kami menyalahgunakannya ke GBK saat decoding (jika pengkodean tidak ditentukan, Java akan mengadopsi pengkodean default sistem) untuk memecahkan kode, maka hanya kode yang dapat ditampilkan. Ketika kami menulis file, yang terbaik adalah menentukan encoding (UTF-8).
Larutan
Contoh 1
Saat mengonversi aliran byte ke aliran karakter, kami menentukan format pengkodean. Ini adalah file kami juga harus dikodekan oleh GB2312
Public Static String Read (String FileName) melempar Exception {InputStream adalah = FileInputStream baru (fileName); BufferedReader di = BufferedReader baru (inputStreamReader baru (IS, "GB2312")); // Tentukan string format pengkodean S; StringBuilder SB = StringBuilder baru (); while ((s = in.readline ())! = null) {sb.append (s + "/n"); } in.close (); kembalikan sb.tostring ();} Contoh 2
Baca langsung melalui aliran byte, dan tentukan pengkodean saat mengonversi ke karakter menggunakan string.
Paket com.dy.xidian; import java.io.fileInputStream; import java.io.inputStream; kelas bufferedInputFile {public static string baca (string filename) melempar pengecualian {@suppresswarnings ("resource") inputStream is = new fileInputStream (fileNename); byte [] b = byte baru [1024]; IS. Baca (b); mengembalikan string baru (B, "GB2312"); }} public class MemoryInput {public static void main (string [] args) melempar Exception {string filename = "e: /html/gb2312.php"; String s = bufferedInputFile.read (fileName); System.out.println (s); }}perangkap
Ada kelas filereader dalam operasi I/O. Kelas ini menyembunyikan detail streaming byte ke dalam aliran karakter, yang dapat kita gunakan dengan cara ini. BufferedReader di = BufferedReader baru (filereader baru (nama file)); Dengan cara ini, kami secara langsung mendapatkan aliran karakter. Tetapi kami menemukan bahwa kami tidak mengatur penyandian, karena metode pengkodean default diadopsi di filereader. Ini menjadi sangat berbahaya. Jika format pengkodean default berbeda dari pengkodean file kami, maka data yang dibaca harus dibumbui. Jadi lebih baik kami menggunakan metode ini dalam contoh untuk mengonversi aliran.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!