ฉันไม่ค่อยมีความรู้เกี่ยวกับการทำงานของ IO มากนัก - - ฉันมีความรู้เพียงเล็กน้อยเกี่ยวกับการเขียนโค้ดและอักขระที่อ่านไม่ออก - - วันนี้ฉันพบข้อกำหนดในการแปลงการเข้ารหัสของไฟล์และส่งกลับสตริงที่เข้ารหัส เช่น การเข้ารหัส GBK ดั้งเดิมที่แปลงเป็น UTF-8
ในหมู่พวกเขา คลาส BytesEncodingDetect จะไม่ถูกโพสต์ ส่วนใหญ่ใช้เพื่อรับรูปแบบการเข้ารหัสไฟล์
ขั้นแรกฉันพยายามแก้ไขวิธีการเข้ารหัสโดยตรงในไฟล์ต้นฉบับ และใช้ URLEncoder และ URLDecoder สำหรับการแปลง แต่ก็ยังไม่ได้ผล คำสุดท้ายของเลขคี่ในภาษาจีนอ่านไม่ออก
ไป่ตู้มองหาวิธีแก้ปัญหา แต่ล้มเหลว ดังนั้นพวกเขาจึงต้องนำแนวคิดของฉันไปใช้ ขั้นแรกให้อ่านเนื้อหาของไฟล์ต้นฉบับ เก็บไว้ใน StringBuffer จากนั้นลบไฟล์ต้นฉบับ จากนั้นสร้างไฟล์ใหม่ จากนั้นจัดเก็บไว้ในไฟล์อื่น แบบฟอร์มการเข้ารหัส
ตรวจสอบเอฟเฟกต์การเข้ารหัส: ระวังอย่าตรวจสอบเอฟเฟกต์ใน eclipse โดยจะดูเฉพาะในรูปแบบการเข้ารหัส ดังนั้นคุณจึงสามารถดูไฟล์ HTML ได้ที่ฝั่งเบราว์เซอร์ หากต้องการดูการเข้ารหัสที่ระบุ คุณสามารถคลิกขวา --- การเข้ารหัสได้ เพื่อพิจารณาว่าจะสำเร็จหรือไม่
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.test;
นำเข้า java.io.BufferedReader;
นำเข้า java.io.BufferedWriter;
นำเข้า java.io.File;
นำเข้า java.io.FileInputStream;
นำเข้า java.io.FileOutputStream;
นำเข้า java.io.InputStream;
นำเข้า java.io.InputStreamReader;
นำเข้า java.io.OutputStream;
นำเข้า java.io.OutputStreamWriter;
นำเข้า java.net.URLDecoder;
นำเข้า java.net.URLEncoder;
การแปลงรหัสคลาสสาธารณะ {
BytesEncodingDetect ส่วนตัว encode = BytesEncodingDetect ใหม่ ();
การแปลงรหัสสาธารณะ () {
-
-
* การแปลงรหัส
* @param toCharset การเข้ารหัสที่จะแปลง
* @param path พาธของไฟล์ที่จะแปลง
* @กลับ
* @throwsException
-
การเข้ารหัสสตริงสาธารณะ (สตริง toCharset, เส้นทางสตริง) ส่งข้อยกเว้น {
ไฟล์ srcFile = ไฟล์ใหม่ (เส้นทาง);
ดัชนี int = encode.detectEncoding (srcFile);
ชุดอักขระสตริง = BytesEncodingDetect.javaname [ดัชนี];
// การเข้ารหัสเหมือนกัน ไม่จำเป็นต้องแปลงรหัส
ถ้า (charset.equalsIgnoreCase (toCharset)) {
return "การเข้ารหัสเหมือนกัน ไม่จำเป็นต้องแปลง";
-
InputStream ใน = FileInputStream ใหม่ (เส้นทาง);
BufferedReader br = BufferedReader ใหม่ (
ใหม่ InputStreamReader (ใน, ชุดอักขระ));
StringBuffer sb = StringBuffer ใหม่ ();
สตริง s1;
ในขณะที่ ((s1=br.readLine())!=null) {
สตริง s = URLEncoder.encode (s1, toCharset);
sb.append(s+"/r/n");//หนึ่งบรรทัด + ขึ้นบรรทัดใหม่
-
br.ปิด();
srcFile.delete();//ลบไฟล์ต้นฉบับ
//เขียนไฟล์ใหม่ด้วยการเข้ารหัสใหม่และส่งคืนค่า
File newfile = new File(path);//สร้างไฟล์ต้นฉบับใหม่
newfile.createNewFile();
OutputStream out = FileOutputStream ใหม่ (ไฟล์ใหม่);
ผู้เขียน OutputStreamWriter = OutputStreamWriter ใหม่ (ออก, toCharset);
BufferedWriter bw = BufferedWriter ใหม่ (ผู้เขียน);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
ผลลัพธ์สตริง = URLDecoder.decode(sb.toString(), toCharset);
bw.flush();//แฟลชเข้าไปในไฟล์
bw.ปิด();
ส่งคืนผลลัพธ์;
-
-