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