文件下載文件名包含中文時,亂碼的處理方法(url編解碼)


utf-8/gbk編碼

"中“這個漢子的utf-8編碼為:E4B8AD

gbk編碼為:D6D0

urlencode

經過urlencode編碼后,

%E4%B8%AD
%D6%D0

服務端這樣編寫代碼時的網絡報文解析

String name = "中文bc_rule"
    + "_export_"
    + DateUtils.formatDateToStr(new Date(), "yyyy_MM_dd HH_mm_ss") + ".xls";

String encode = URLEncoder.encode(name, "UTF-8");
httpServletResponse.setHeader("filename", encode);

網絡抓包可以看到,就是把中字的urlencode編碼傳下去了:

"%E4%B8%AD",看來默認就是UTF-8編碼。

客戶端是js,如下方式進行解碼:

const filename = res.headers.get("filename");
console.log(`origin name:${  filename}`)
const filename2 = decodeURIComponent(filename);
console.log(`filename:${filename2}`);

console打印的結果:

origin name:%E4%B8%AD%E6%96%87bc_rule_export_2022_01_06+10_22_55.xls
filename:中文bc_rule_export_2022_01_06+10_22_55.xls

可以看到,客戶端也是默認用了UTF-8去解碼,否則應該是解碼不出來的。

客戶端代碼沒變的情況下,遇到下圖中用gbk編碼的字符串,報錯了:

下圖直接在console實驗,確實會報錯:

decodeURIComponent("%D6%D0")
VM671:1 Uncaught URIError: URI malformed
    at decodeURIComponent (<anonymous>)
    at <anonymous>:1:1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM