Dies ist ein Programm, das den korrekten Originaltext aus dem verstümmelten Text erhalten kann, basierend auf dem Prinzip, dass die falsche Codierung häufig zu einer Bit -Supplementierung führt, sodass die Anzahl der vom richtigen Text verwendeten Bytes der kleinste (eins) sein sollte.
Die Codekopie lautet wie folgt:
Paket com.hongyuan.test;
importieren java.io.unsupportedenCodingException;
/*
* Dies ist ein Programm, das den richtigen Originaltext aus dem verstümmelten Text erhalten kann, basierend auf dem Prinzip, dass eine falsche Codierung häufig zu einer Bit -Supplementierung führt.
* Daher sollte der richtige Text die Mindestanzahl von Bytes (eins) verwenden.
*
* Wenn Sie beim Testen dieses Programms nicht den richtigen Text erhalten, sind die möglichen Gründe wie folgt:
* 1. Dieses Programm kann den ursprünglichen Text nur einmal aus dem fehlerkodierten Text abrufen und den Text nicht aus mehreren fehlerkodierten Text wiederherstellen.
* 2. Manchmal verursacht eine falsche Codierung einige Zeichen unsichtbare Zeichen, und Sie können nicht den gesamten verstümmelten Text kopieren, was zu fehlenden Bits führt. In diesem Fall kann der Text nicht wiederhergestellt werden.
* 3. Der Originaltext ist ein relativ großer Zeichensatz.
* 4. Herzlichen Glückwunsch zum Gewinnen des Preises. (Das ist in der Tat selten)
*
* Hinweis: Der verstümmelte Text im Programm wird durch Anpassen von Baidu-Homepage (UTF-8) an GBK (offensichtlich verstümmelt) angepasst. Wenn Sie Fragen haben, können Sie bitte antworten.
*/
öffentliche Klasse Charsettest {
public static final String [] charset_names = new String [] {"ISO8859-1", "GBK", "UTF-8"};
public static void main (String [] args) wirft eine nicht unterstützte AnscodingException aus {
// Garbose -Schnur
String str = "中文版文版文版文版";
int strlength = integer.max_value; // Zeichenlänge
String NewStr = ""; // Ständer analysiert aus verstümmelten Saiten
String srccharset = ""; // Strom verstümmelte String -Kodierung
String targetCharset = ""; // korrekte Codierung von verstümmelten Zeichenfolgen korrekt
// Durch mögliche Codierungskombinationen reisen, um das Codierungsformat mit der kleinsten Codierungslänge zu erstellen
für (int i = 0; i <charset_names.length; i ++) {
für (int j = 0; j <charset_names.length; j ++) {
String temp = new String (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];
}
}
}
// Ausgabe des Abfragescodes und korrigieren Textformat
System.out.println (SrcCharSet+"->"+targetCharSet+":"+newstr);
}
}