Rumah >Java >javaTutorial >Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

WBOY
WBOYke hadapan
2022-08-24 09:09:202481semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang java Ia terutamanya memperkenalkan kaedah pelaksanaan pengekodan Java apabila mencipta fail Artikel ini memperkenalkannya dengan terperinci melalui kod sampel, yang sangat berguna untuk semua orang . Ia mempunyai rujukan dan nilai pembelajaran tertentu semasa belajar atau bekerja.

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

Kajian yang disyorkan: "tutorial video java"

Kata Pengantar: Baru-baru ini, saya telah mempelajari pengetahuan yang berkaitan dengan aliran Java IO. Saya ingin Mengamalkan dan mengukuhkan pengetahuan yang telah anda pelajari dengan membaca dan menulis dokumen. Apabila menggunakan kelas Fail untuk mencipta fail, saya tiba-tiba terfikir, bagaimanakah saya harus menentukan pengekodan yang digunakan oleh fail tersebut? Kemudian saya fikir, bagaimana saya harus menyemak pengekodan fail?

1. Analisis Masalah

Mula-mula pergi ke Internet untuk mencari jawapannya adalah seperti berikut:

FileInputStream fis=new FileInputStream(“xxxx.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);

Kod di atas mungkin bermakna apabila menulis a. fail, Aksara dikodkan dalam UTF-8, yang berbeza daripada apa yang saya harapkan. Seperti yang berikut,

File myfile = new File("test.txt”, “UTF-8”);
if (!myfile.exists()) myfile.createNewFile();

Jadi, saya menyemak dokumentasi Java API 8 rasmi tidak menyediakan pembina yang boleh menentukan pengekodan aksara.

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

Pada masa yang sama, ia tidak menyediakan kaedah lain untuk mengakses pengekodan aksara seperti set atau get, menunjukkan bahawa pengekodan aksara bukanlah atribut yang wujud bagi fail. Seperti masa penciptaan fail, masa pengubahsuaian fail, sama ada ia boleh dibaca, boleh ditulis dan boleh laku, ini adalah atribut yang wujud bagi fail, atau meta-maklumat, ia adalah sebahagian daripada fail.

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

2. Pengekodan aksara

Kami tahu bahawa sebarang maklumat yang disimpan dalam komputer ialah rentetan 01, dan teks tidak terkecuali.

Pemprosesan aksara termasuk dua proses: Pengekodan dan penyahkodan

Pengekodan: "petakan" aksara kepada rentetan 01
Penyahkodan: tukar 01 Rentetan "peta" kepada aksara

Pengekodan aksara yang berbeza, seperti GBK, UTF-8, menggunakan peraturan yang berbeza untuk pengekodan dan penyahkodan.

Untuk rentetan teks yang sama: "China", gunakan pengekodan UTF-8 untuk menyimpan, secara amnya menggunakan tiga bait untuk menyimpan aksara Cina (bentuk heksadesimal rentetan 01 yang mendasari).

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

disimpan menggunakan pengekodan GBK, menggunakan dua bait untuk mewakili aksara Cina.

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

Apabila kami menulis teks dalam editor teks dan menyimpannya, editor akan "memetakan" teks ke dalam rentetan 01 mengikut jenis pengekodan aksara yang anda tetapkan.

Jenis aksara yang anda tetapkan hanyalah peraturan penukaran untuk editor mengekod teks ke dalam 10 rentetan dan bukan atribut teks.

Apabila editor membuka fail teks, apa yang dipaparkan bukanlah rentetan 01 asas, tetapi teks Ini kerana editor menggunakan pengekodan teks tertentu untuk menyahkod rentetan 01 kepada aksara. Jika, apabila penyahkodan, pengekodan aksara yang digunakan adalah konsisten atau serasi dengan pengekodan, teks boleh dipaparkan dengan betul. Jika pengekodan aksara yang digunakan semasa penyahkodan tidak konsisten atau tidak serasi dengan pengekodan, aksara akan menjadi kacau bilau.

Sebagai contoh, saya mempunyai fail teks menggunakan pengekodan GBK, kandungannya ialah "Bila bulan terang akan keluar",

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail

Saya menggunakan kod VS (editor teks yang sangat berguna daripada Microsoft) untuk membuka fail, yang secara istilah bermaksud menyahkod fail. Pengekodan teks lalai yang digunakan ialah UTF-8, dan penyahkodan adalah sama. Walau bagaimanapun, kerana lapisan bawah teks saya ialah rentetan 01 yang dikodkan GBK (dua bait dan satu aksara), menggunakan UTF-8 untuk menyahkod rentetan 01 sudah pasti akan membawa kepada aksara bercelaru disebabkan pengekodan dan penyahkodan yang tidak konsisten. Pada masa ini, selagi anda memilih pengekodan GBK yang sepadan secara manual, fail yang dinyahkod tidak akan bercelaru.

Watak yang bercelaru juga menggambarkan dari sisi bahawa pengekodan aksara bukanlah atribut yang wujud pada fail.

Saya telah banyak bercakap hanya untuk menggambarkan perkara ini: Pengekodan aksara ialah peraturan yang digunakan semasa penyahkodan dan pengekodan, bukan atribut yang wujud pada fail.

Saya tidak dapat membantu tetapi tertanya-tanya, mengapa pengekodan aksara tidak ditetapkan sebagai sebahagian daripada sifat fail?

Andaikan ia boleh ditetapkan dan ditetapkan kepada GBK, maka sistem pengendalian perlu mengekalkan fungsi tersebut. Sama seperti fail tidak boleh ditulis, jika program cuba menulis ke fail, sistem pengendalian akan menolak untuk menulis bait yang mesti ditulis oleh sistem pengendalian mesti memenuhi keperluan pengekodan GBK keperluan sistem pengendalian Memeriksa kesahihan bait memerlukan banyak overhed prestasi, malah mustahil untuk dilaksanakan, kerana sesetengah bait khas boleh mewakili sama ada GBK atau UTF-8, yang tidak jelas. Sekarang, apa gunanya melakukan ini? Adakah ia supaya editor boleh memilih pengekodan yang betul berdasarkan sifat pengekodan semasa membuka fail? Tidak perlu seorang editor pintar boleh membuat kesimpulan tentang pengekodan rentetan 01 anda berdasarkan beberapa bait pertama kandungan. Selain itu, anda juga boleh menetapkan pengekodan aksara yang digunakan untuk penyahkodan secara manual.

3. Penyelesaian Masalah

Apabila mencipta fail, pengekodan fail tidak boleh ditentukan. Apabila menulis teks pada fail (seperti Ctrl S menyimpan dalam editor teks, yang pada asasnya menjalankan operasi menulis), anda boleh memilih untuk menukar teks kepada peraturan pengekodan rentetan 01.

Untuk program Java, kodnya adalah seperti berikut, iaitu kod yang disebut pada permulaan artikel:

FileInputStream fis=new FileInputStream(“xxxx.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);

Pembelajaran yang disyorkan: "tutorial video java "

Atas ialah kandungan terperinci Kaedah pelaksanaan Java untuk menentukan pengekodan semasa membuat fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam