Este é um programa que pode obter o texto original correto do texto distorcido, com base no princípio de que a codificação errada geralmente leva a suplementação de bits, portanto o número de bytes usados pelo texto correto deve ser o menor (um).
A cópia do código é a seguinte:
pacote com.hongyuan.test;
importar java.io.unsupportEnCodingException;
/*
* Este é um programa que pode obter o texto original correto do texto distorcido, com base no princípio de que a codificação incorreta geralmente leva a suplementação de bits,
* Portanto, o texto correto deve usar o número mínimo de bytes (um).
*
* Se você não conseguir obter o texto correto ao testar este programa, os possíveis motivos são os seguintes:
* 1. Este programa pode obter apenas o texto original do texto codificado por erro uma vez e não pode recuperar o texto de vários texto codificados por erros.
* 2. Às vezes, a codificação errada faz com que alguns caracteres se tornem caracteres invisíveis, e você não pode copiar todo o texto distorcido, resultando em bits ausentes. Nesse caso, o texto não pode ser restaurado.
* 3. O texto original é um conjunto de caracteres relativamente grande.
* 4. Parabéns por ganhar o prêmio. (Isso é realmente raro)
*
* Nota: O texto distorcido no programa é obtido ajustando a página inicial do Baidu (UTF-8) para GBK (obviamente iluminada). Se você tiver alguma dúvida, não hesite em responder.
*/
classe pública CharsetTest {
public static final string [] charset_names = new String [] {"ISO8859-1", "GBK", "UTF-8"};
public static void main (string [] args) lança UnsupportEdEncodingingException {
// string garbose
String str = "中文版文版文版文版";
int strLength = Integer.max_value; // Comprimento do caractere
String newstr = ""; // Stands analisados de cordas ilegais
String srccharset = ""; // codificação de cordas ilegais atuais
String Targetcharset = ""; // Codificação correta de cordas ilegíveis
// viaja através de possíveis combinações de codificação para criar o formato de codificação com o menor comprimento de codificação
for (int i = 0; i <charset_names.length; i ++) {
for (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];
}
}
}
// emitir o código da consulta e o formato de texto correto
System.out.println (srccharset+"->"+TargetCharSet+":"+Newstr);
}
}