最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java下載文件中文文件名亂碼的解決方案(文件名包含很多%)

 更新時間:2025年02月13日 16:57:19   作者:買火車的小男孩  
Java下載文件時,文件名中文亂碼問題通常是由于編碼不正確導(dǎo)致的,使用`URLEncoder.encode(filepath, "UTF-8")`可以解決在提示下載框中正確顯示漢字文件名的問題,但在選擇直接打開時,文件名會變成亂碼,解決這個問題的方法

Java下載文件中文文件名亂碼問題

一般情況下,大家都是這樣

fileName = URLEncoder.encode(fileName, "UTF-8");
response.reset();
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.copy(inputStream, response.getOutputStream());

其實亂碼就是亂在;filename=" + fileName這里,對文件名的編碼設(shè)定上。

使用URLEncoder.encode(filepath,"UTF-8")雖然可以解決在提示下載框中正確顯示漢字文件名的問題,并且在選擇保存,然后打開的情況下,文件名稱也可以正確的顯示。

但是在提示下載框中,選擇直接打開,則文件名稱變成了類似這樣的樣子。

“%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E7%9A%84%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6%E5%90%8D”

為了解決這個問題

百度了好久,是這樣的

String downloadfile = new String(filepath.getBytes("gb2312"),"iso8859-1");
response.addHeader("Content-Disposition","attachment;filename=" + downloadfile );

還有這樣

String userAgent = request.getHeader("User-Agent");
String formFileName = "員工表.xls";

// 針對IE或者以IE為內(nèi)核的瀏覽器:
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
formFileName = java.net.URLEncoder.encode(formFileName, "UTF-8");
} else {
// 非IE瀏覽器的處理:
formFileName = new String(formFileName.getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-disposition",String.format("attachment; filename=\"%s\"", formFileName));
response.setContentType("multipart/form-data");
response.setCharacterEncoding("UTF-8");

發(fā)現(xiàn)都不能解決問題,不懈努力,崩潰邊緣

最終解決

fileName = URLEncoder.encode(fileName, "UTF-8");
response.reset();
// fileName后面設(shè)置編碼格式是重點
response.setHeader("Content-disposition", "attachment;filename="+fileName+";"+"filename*=utf-8''"+fileName);
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.copy(inputStream, response.getOutputStream());

完美解決!?。?/p>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • jstorm源碼解析之bolt異常處理方法

    jstorm源碼解析之bolt異常處理方法

    下面小編就為大家?guī)硪黄猨storm源碼解析之bolt異常處理方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 使用Maven進行依賴排除的詳細步驟

    使用Maven進行依賴排除的詳細步驟

    在Maven中,依賴排除是一種常見的技術(shù),用于從項目的依賴中排除特定的傳遞性依賴,這通常用于解決依賴沖突或避免引入不需要的庫,以下是如何在Maven中使用依賴排除的詳細步驟,包括代碼示例,需要的朋友可以參考下
    2024-11-11
  • 堆排序算法的講解及Java版實現(xiàn)

    堆排序算法的講解及Java版實現(xiàn)

    這篇文章主要介紹了堆排序算法的講解及Java版實現(xiàn),堆排序基于堆這種數(shù)據(jù)結(jié)構(gòu),在本文中對堆的概念也有補充介紹,需要的朋友可以參考下
    2016-05-05
  • Java?Spring聲明式事務(wù)失效情況解決辦法(天翼通訊)

    Java?Spring聲明式事務(wù)失效情況解決辦法(天翼通訊)

    在Spring的聲明式事務(wù)中,多線程環(huán)境下事務(wù)會失效,因為子線程無法繼承父線程的事務(wù)上下文,這篇文章主要介紹了Java?Spring聲明式事務(wù)失效情況解決辦法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-10-10
  • Java中的多態(tài)、抽象類和接口詳解

    Java中的多態(tài)、抽象類和接口詳解

    這篇文章詳細講解了Java的多態(tài)、抽象類和接口,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Java23種設(shè)計模式中的單例模式你了解嗎

    Java23種設(shè)計模式中的單例模式你了解嗎

    這篇文章主要為大家詳細介紹了Java23種設(shè)計模式中的單例模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • SPRING IOC注入方式過程解析

    SPRING IOC注入方式過程解析

    這篇文章主要介紹了SPRING IOC注入方式過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot+Querydsl?框架實現(xiàn)復(fù)雜查詢解析

    SpringBoot+Querydsl?框架實現(xiàn)復(fù)雜查詢解析

    本篇主要將介紹的是利用spring query dsl框架實現(xiàn)的服務(wù)端查詢解析和實現(xiàn)介紹,對SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧
    2022-05-05
  • 基于Java向zip壓縮包追加文件

    基于Java向zip壓縮包追加文件

    這篇文章主要介紹了基于Java向zip壓縮包追加文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解

    RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解

    這篇文章主要為大家介紹了RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論

宜都市| 沅陵县| 克拉玛依市| 招远市| 山西省| 改则县| 呼伦贝尔市| 保德县| 鹿邑县| 汝南县| 远安县| 潜山县| 上犹县| 浙江省| 宝清县| 瓦房店市| 玉树县| 绥化市| 渑池县| 会东县| 广河县| 合江县| 杂多县| 银川市| 平山县| 太原市| 密云县| 民权县| 定远县| 浦江县| 哈尔滨市| 富锦市| 庆阳市| 长沙县| 英山县| 泾阳县| 娱乐| 遵化市| 杭锦后旗| 屯昌县| 镇平县|