Eu realmente não sei muito sobre operações de IO. . . Também tenho pouco conhecimento de codificação e caracteres ilegíveis. . . Hoje encontrei um requisito para converter a codificação de um arquivo e retornar uma string codificada, como a codificação GBK original, convertida para UTF-8
Entre eles, a classe BytesEncodingDetect não será postada. Usado principalmente para obter o formato de codificação de arquivo.
Tentei primeiro modificar o método de codificação diretamente no arquivo de origem e usar URLEncoder e URLDecoder para conversão, mas ainda não funcionou. O último caractere de um número ímpar em chinês está distorcido.
O Baidu procurou uma solução, mas não conseguiu, então tiveram que adotar minha ideia: primeiro ler o conteúdo do arquivo de origem, armazená-lo no StringBuffer, depois excluir o arquivo de origem, criar um novo arquivo e armazená-lo em outro forma de codificação.
Visualize o efeito após a codificação: Tenha cuidado para não visualizar o efeito no Eclipse, apenas o visualiza em uma forma de codificação, para que você possa visualizar os arquivos html no lado do navegador. Para visualizar a codificação especificada, você pode clicar com o botão direito ---. codificação para determinar se foi bem-sucedido.
Copie o código do código da seguinte forma:
pacote com.test;
importar java.io.BufferedReader;
importar java.io.BufferedWriter;
importar java.io.File;
importar java.io.FileInputStream;
importar java.io.FileOutputStream;
importar java.io.InputStream;
importar java.io.InputStreamReader;
importar java.io.OutputStream;
importar java.io.OutputStreamWriter;
importar java.net.URLDecoder;
importar java.net.URLEncoder;
classe pública Transcodificação {
private BytesEncodingDetect encode = new BytesEncodingDetect();
Transcodificação pública() {
}
/**
* Conversão de código
* @param toCharset A codificação a ser convertida
* @param path O caminho do arquivo a ser convertido
* @retornar
* @throwsException
*/
codificação de string pública (String toCharset, caminho de String) lança exceção {
Arquivo srcFile = novo arquivo(caminho);
int índice = encode.detectEncoding(srcFile);
String charset = BytesEncodingDetect.javaname[index];
// A codificação é a mesma, não há necessidade de transcodificar
if (charset.equalsIgnoreCase(toCharset)) {
return "A codificação é a mesma, nenhuma conversão é necessária";
}
InputStream in = new FileInputStream(caminho);
BufferedReader br = novo BufferedReader(
novo InputStreamReader(in, conjunto de caracteres));
StringBuffer sb = new StringBuffer();
Cadeia s1;
while ((s1=br.readLine())!=null) {
String s = URLEncoder.encode(s1, toCharset);
sb.append(s+"/r/n");//Uma linha + retorno de carro
}
close();
srcFile.delete(); //Exclui o arquivo original
//Reescreva o arquivo com a nova codificação e retorne o valor
Arquivo novoarquivo = novo arquivo(caminho); //Reconstrui o arquivo original
newfile.createNewFile();
OutputStream out = new FileOutputStream(novoarquivo);
Escritor OutputStreamWriter = new OutputStreamWriter(out, toCharset);
BufferedWriter bw = new BufferedWriter(gravador);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
Resultado da string = URLDecoder.decode(sb.toString(), toCharset);
bw.flush(); //Flash no arquivo
close();
resultado de retorno;
}
}