أنا حقًا لا أعرف الكثير عن عمليات الإدخال والإخراج. . . لدي أيضًا القليل من المعرفة بالبرمجة والشخصيات المشوهة. . . واجهت اليوم متطلبًا لتحويل ترميز ملف وإرجاع سلسلة مشفرة، مثل ترميز GBK الأصلي، المحول إلى UTF-8
من بينها، لن يتم نشر فئة BytesEncodingDetect. يستخدم بشكل أساسي للحصول على تنسيق ترميز الملف.
لقد حاولت أولاً تعديل طريقة التشفير مباشرة في الملف المصدر واستخدام URLEncoder وURLDecoder للتحويل، لكنها ما زالت لا تعمل. الحرف الأخير من الرقم الفردي باللغة الصينية مشوه.
بحثت بايدو عن حل، لكنها فشلت، لذلك اضطروا إلى تبني فكرتي: قم أولاً بقراءة محتوى الملف المصدر، وتخزينه في StringBuffer، ثم حذف الملف المصدر، ثم إنشاء ملف جديد، ثم تخزينه في ملف آخر. نموذج الترميز.
عرض التأثير بعد الترميز: احرص على عدم عرض التأثير في Eclipse، ولا يعرضه إلا في نموذج ترميز، حتى تتمكن من عرض ملفات html على جانب المتصفح لعرض الترميز المحدد، يمكنك النقر بزر الماوس الأيمن. الترميز لتحديد ما إذا كان ناجحا.
انسخ رمز الكود كما يلي:
حزمة com.test؛
import java.io.BufferedReader;
import java.io.BufferedWriter;
استيراد java.io.File؛
import java.io.FileInputStream;
import java.io.FileOutputStream;
استيراد java.io.InputStream؛
استيراد java.io.InputStreamReader؛
استيراد java.io.OutputStream؛
import java.io.OutputStreamWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
تحويل ترميز الطبقة العامة {
تشفير BytesEncodingDetect الخاص = new BytesEncodingDetect();
تحويل الترميز العام () {
}
/**
* تحويل الكود
* @param toCharset الترميز المراد تحويله
*param path مسار الملف المراد تحويله
* @يعود
* @throwsException
*/
ترميز السلسلة العامة (سلسلة toCharset، مسار السلسلة) يطرح استثناء {
File srcFile = new File(path);
int Index = encode.detectEncoding(srcFile);
سلسلة محارف = BytesEncodingDetect.javaname[index];
// التشفير هو نفسه، لا حاجة لتحويل الكود
إذا (charset.equalsIgnoreCase(toCharset)) {
إرجاع "الترميز هو نفسه، لا حاجة للتحويل"؛
}
InputStream in = new FileInputStream(path);
BufferedReader br = BufferedReader الجديد(
new InputStreamReader(in, charset));
StringBuffer sb = new StringBuffer();
سلسلة S1؛
بينما ((s1=br.readLine())!=null) {
String s = URLEncoder.encode(s1, toCharset);
sb.append(s+"/r/n");// سطر واحد + حرف إرجاع
}
br. Close();
srcFile.delete();// احذف الملف الأصلي
// أعد كتابة الملف بالترميز الجديد وأرجع القيمة
File newfile = new File(path);// أعد إنشاء الملف الأصلي
newfile.createNewFile();
OutputStream out = new FileOutputStream(newfile);
OutputStreamWriterwriter = new OutputStreamWriter(out, toCharset);
BufferedWriter bw = new BufferedWriter(writer);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
نتيجة السلسلة = URLDecoder.decode(sb.toString(), toCharset);
bw.flush();// فلاش في الملف
bw. Close();
نتيجة الإرجاع؛
}
}