Heim > Java > JavaBase > Einführung in Lösungen für verstümmelte Dateinamen in Java-Downloads

Einführung in Lösungen für verstümmelte Dateinamen in Java-Downloads

Freigeben: 2019-12-03 10:53:54
Original
1972 Leute haben es durchsucht

Einführung in Lösungen für verstümmelte Dateinamen in Java-Downloads

Funktion zum Herunterladen von Java-Webentwicklungsdateien (Code lautet wie folgt): Wenn der Dateiname chinesische Zeichen enthält, wird er häufig verstümmelt angezeigt und muss codiert werden. (Empfohlen: Java-Video-Tutorial)

String fileName = "测试文件.doc";
try {

    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

    response.setHeader("Content-disposition", "attachment; filename=" + fileName);

    response.setContentLength((int) file.length());

    response.setContentType("application/octet-stream;charset=UTF-8");

    byte[] b = new byte[1024];

    int i = 0;

    FileInputStream fis = new FileInputStream(file);

    ServletOutputStream out = response.getOutputStream();
    while ((i = fis.read(b)) > 0) {

        out.write(b, 0, i);

    }
    out.flush();
    out.close;

    fis.close();

} catch (IOException e) {

    e.printStackTrace();

}
FacesContext.getCurrentInstance().responseComplete();
return null;
Nach dem Login kopieren

Option 1: Dateinamen in Unicode kodieren

fileName = URLEncoder.encode(fileName, "UTF-8");
Nach dem Login kopieren

Der Dateiname wird in Unicode-Kodierung konvertiert (%E6%B5 %8B %E8%AF%95%E6%96%87%E4%BB%B6.doc) ist der Test unter dem IE-Browser normal, aber der beim Testen unter dem Firefox-Browser erhaltene Dateiname ist nicht dekodierter Unicode.

Option 2: Kodieren Sie den Dateinamen nach ISO-8859-1

fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
Nach dem Login kopieren

Mit dieser Methode können Dateien mit chinesischen Dateinamen sowohl unter IE als auch unter Firefox abgerufen werden. Wenn der Dateiname jedoch Leerzeichen enthält, schneidet Firefox die Leerzeichen im Dateinamen ab und Sie müssen die Leerzeichen im Dateinamen vor der Codierung durch sichtbare Zeichen wie Unterstriche ersetzen.

fileName = new String(fileName.replace(" ", "_").getBytes("UTF-8"), "ISO-8859-1");
Nach dem Login kopieren

Option 3: Browser-Inkompatibilität

Bei der Java-Webentwicklung tritt häufig das Problem verstümmelter Dateinamen in Datei-Download-Funktionen auf.

Verschiedene Browser bieten unterschiedliche Lösungen für dieses Problem.

Für IE kodiert UTF8 den Dateinamen über URLEncoder.

Andere Browser (Firefox, Chrome, Safari, Opera) müssen Bytes in ISO8859-1 konvertieren.

if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
    filename = URLEncoder.encode(filename, "UTF-8");
} else {
    filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}
Nach dem Login kopieren

Weitere Java-Kenntnisse finden Sie in der Spalte Java Basic Tutorial.

Das obige ist der detaillierte Inhalt vonEinführung in Lösungen für verstümmelte Dateinamen in Java-Downloads. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage