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;
Option 1: Dateinamen in Unicode kodieren
fileName = URLEncoder.encode(fileName, "UTF-8");
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");
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");
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"); }
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!