Heim > Java > JavaBase > Hauptteil

Der Dateiname ist verstümmelt, wenn Java die Datei herunterlädt

王林
Freigeben: 2019-11-23 15:04:52
Original
3256 Leute haben es durchsucht

Der Dateiname ist verstümmelt, wenn Java die Datei herunterlädt

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

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. Der Test ist unter dem IE-Browser normal, aber unter Der Firefox-Browser Der durch den Test erhaltene Dateiname ist Unicode ohne Dekodierung.

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 wird der Dateiname über URLEncoder UTF8-codiert, während andere Browser (Firefox, Chrome, Safari, Opera) Bytes in ISO8859-1 konvertieren müssen.

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

Empfohlenes Tutorial: Einführung in die Java-Entwicklung

Das obige ist der detaillierte Inhalt vonDer Dateiname ist verstümmelt, wenn Java die Datei herunterlädt. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage