هذا هو برنامج يمكن أن يحصل على النص الأصلي الصحيح من النص المشوه ، بناءً على مبدأ أن الترميز الخاطئ غالبًا ما يؤدي إلى مكملات بت ، وبالتالي يجب أن يكون عدد البايتات المستخدمة بواسطة النص الصحيح هو الأصغر (واحد).
نسخة الكود كما يلي:
حزمة com.hongyuan.test ؛
استيراد java.io.unsupportedencodingException ؛
/*
* هذا برنامج يمكنه الحصول على النص الأصلي الصحيح من النص المشوه ، بناءً على المبدأ الذي يؤدي الترميز غير الصحيح إلى غالبًا إلى مكملات بت ،
* لذلك يجب أن يستخدم النص الصحيح الحد الأدنى لعدد البايتات (واحد).
*
* إذا لم تتمكن من الحصول على النص الصحيح عند اختبار هذا البرنامج ، فإن الأسباب المحتملة هي كما يلي:
* 1. يمكن لهذا البرنامج الحصول على النص الأصلي فقط من النص المشفر عن الأخطاء مرة واحدة ، ولا يمكن استعادة النص من نص مشفر عن الأخطاء.
* 2. في بعض الأحيان يؤدي الترميز الخاطئ إلى أن تصبح بعض الأحرف أحرفًا غير مرئية ، ولا يجوز لك نسخ جميع النص المشوه ، مما يؤدي إلى مفقودة. في هذه الحالة ، لا يمكن استعادة النص.
* 3. يستخدم النص الأصلي مجموعة أحرف كبيرة نسبيًا.
* 4. تهانينا على الفوز بالجائزة. (هذا نادر بالفعل)
*
* ملاحظة: يتم الحصول على النص المشوهة في البرنامج عن طريق ضبط الصفحة الرئيسية لـ BAIDU (UTF-8) إلى GBK (من الواضح أن الرفاق المهتمين يمكنهم استخدام الاختبارات المشوهة الأخرى. إذا كان لديك أي أسئلة ، فلا تتردد في الرد.
*/
الطبقة العامة charsettest {
السلسلة النهائية الثابتة العامة [] charset_names = new string [] {"ISO8859-1" ، "GBK" ، "UTF-8"} ؛
الفراغ الثابت العام (سلسلة [] args) يلقي UnduportedEncodingException {
// سلسلة Garbose
String str = "中文版文版文版文版" ؛
int strlength = integer.max_value ؛ // طول الحرف
سلسلة NewsTr = "" ؛ // تقف من الأوتار المشوهة
سلسلة srccharset = "" ؛ // ترميز سلسلة مشوهة الحالية
String TargetCharset = "" ؛ // الترميز الصحيح للسلاسل المشوهة
// السفر من خلال مجموعات الترميز الممكنة لإنشاء تنسيق الترميز مع أصغر طول ترميز
لـ (int i = 0 ؛ i <charset_names.length ؛ i ++) {
لـ (int j = 0 ؛ j <charset_names.length ؛ j ++) {
سلسلة temp = سلسلة جديدة (str.getBytes (charset_names [i]) ، charset_names [j]) ؛
//system.out.println(temp) ؛
if (temp.length () <= strlength) {
strlength = temp.length () ؛
NewStr = temp ؛
srccharset = charset_names [i] ؛
TargetCharset = charset_names [j] ؛
}
}
}
// إخراج رمز الاستعلام وتنسيق النص الصحيح
System.out.println (srccharset+"->"+targetcharset+":"+newstr) ؛
}
}