Este es un programa que puede obtener el texto original correcto del texto confuso, en función del principio de que la codificación incorrecta a menudo conduce a la suplementación de bits, por lo que el número de bytes utilizados por el texto correcto debe ser el más pequeño (uno).
La copia del código es la siguiente:
paquete com.hongyuan.test;
import java.io.unsupportedencodingException;
/*
* Este es un programa que puede obtener el texto original correcto del texto confuso, en función del principio de que la codificación incorrecta a menudo conduce a suplementos de bits,
* Por lo tanto, el texto correcto debe usar el número mínimo de bytes (uno).
*
* Si no puede obtener el texto correcto al probar este programa, las posibles razones son las siguientes:
* 1. Este programa solo puede obtener el texto original del texto codificado por error una vez, y no puede recuperar el texto de múltiples texto codificado por error.
* 2. A veces, la codificación incorrecta hace que algunos caracteres se conviertan en caracteres invisibles, y no puede copiar todo el texto confuso, lo que resulta en fragmentos faltantes. En este caso, el texto no se puede restaurar.
* 3. El texto original es un conjunto de caracteres relativamente grande.
* 4. Felicitaciones por ganar el premio. (Esto es realmente raro)
*
* Nota: El texto confuso en el programa se obtiene ajustando la página de inicio de Baidu (UTF-8) a GBK (obviamente confuso). Si tiene alguna pregunta, no dude en responder.
*/
clase pública Charsettest {
public static final String [] charset_names = new String [] {"ISO8859-1", "GBK", "UTF-8"};
Public static void main (string [] args) lanza no comportedEncodingException {
// cuerda de garbose
Cadena str = "中文版文版文版文版";
int strlength = integer.max_value; // longitud del personaje
String Newstr = ""; // se analiza desde cuerdas confusas
Cadena srccharset = ""; // codificación de cadena confusión actual
Cadena TargetCharset = ""; // Codificación correcta de cuerdas confusas
// viajar a través de posibles combinaciones de codificación para crear el formato de codificación con la longitud de codificación más pequeña
para (int i = 0; i <charset_names.length; i ++) {
para (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];
}
}
}
// emite el código de consulta y correcta formato de texto
System.out.println (srccharset+"->"+targetcharset+":"+newrtr);
}
}