Ich weiß wirklich nicht viel über IO-Operationen. . . Ich habe auch wenig Kenntnisse über Codierung und verstümmelte Zeichen. . . Heute bin ich auf die Anforderung gestoßen, die Codierung einer Datei zu konvertieren und eine codierte Zeichenfolge zurückzugeben, z. B. die ursprüngliche GBK-Codierung, konvertiert in UTF-8
Darunter wird die Klasse BytesEncodingDetect nicht veröffentlicht. Wird hauptsächlich verwendet, um das Dateikodierungsformat zu erhalten.
Ich habe zuerst versucht, die Kodierungsmethode direkt in der Quelldatei zu ändern und URLEncoder und URLDecoder für die Konvertierung zu verwenden, aber es hat immer noch nicht funktioniert. Das letzte Zeichen einer ungeraden Zahl im Chinesischen ist verstümmelt.
Baidu suchte nach einer Lösung, scheiterte jedoch, also mussten sie meine Idee übernehmen: Lesen Sie zuerst den Inhalt der Quelldatei, speichern Sie ihn im StringBuffer, löschen Sie dann die Quelldatei, erstellen Sie dann eine neue Datei und speichern Sie sie dann in einer anderen Codierungsform.
Zeigen Sie den Effekt nach der Codierung an: Achten Sie darauf, den Effekt nicht in Eclipse anzuzeigen. Sie können also HTML-Dateien auf der Browserseite anzeigen, indem Sie mit der rechten Maustaste auf --- klicken. Codierung, um festzustellen, ob es erfolgreich ist.
Kopieren Sie den Codecode wie folgt:
Paket com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
java.io.File importieren;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
öffentliche Klassentranskodierung {
private BytesEncodingDetect encode = new BytesEncodingDetect();
public Transcoding() {
}
/**
* Codekonvertierung
* @param toCharset Die zu konvertierende Kodierung
* @param path Der zu konvertierende Dateipfad
* @zurückkehren
* @throwsException
*/
öffentliche String-Kodierung (String toCharset, String-Pfad) löst eine Ausnahme aus{
Datei srcFile = neue Datei (Pfad);
int index = encode.detectEncoding(srcFile);
String charset = BytesEncodingDetect.javaname[index];
// Die Kodierung ist dieselbe, eine Transkodierung ist nicht erforderlich
if (charset.equalsIgnoreCase(toCharset)) {
return „Die Kodierung ist die gleiche, es ist keine Konvertierung erforderlich“;
}
InputStream in = new FileInputStream(path);
BufferedReader br = new BufferedReader(
neuer InputStreamReader(in, charset));
StringBuffer sb = new StringBuffer();
Zeichenfolge s1;
while ((s1=br.readLine())!=null) {
String s = URLEncoder.encode(s1, toCharset);
sb.append(s+"/r/n");//Eine Zeile + Wagenrücklauf
}
br.close();
srcFile.delete();//Löschen Sie die Originaldatei
//Schreiben Sie die Datei mit der neuen Codierung neu und geben Sie den Wert zurück
Datei neue Datei = neue Datei (Pfad); // Originaldatei neu erstellen
newfile.createNewFile();
OutputStream out = new FileOutputStream(newfile);
OutputStreamWriterwriter = new OutputStreamWriter(out, toCharset);
BufferedWriter bw = new BufferedWriter(writer);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
String result = URLDecoder.decode(sb.toString(), toCharset);
bw.flush();//Flash in die Datei
bw.close();
Ergebnis zurückgeben;
}
}