解决前端利用blob下载csv因为多语言导致乱码的问题

  • 后台:把文件流获取成二进制形式并用base64加密返回
  • 前端:把返回的二进制window.atob(data.content)解密,利用Uint8Array 数组类型(表示一个8位无符号整型数组)生成blos需要的ArrayBuffer
  • 代码如下:
downloadFile().then(res => {
    //  base64解码
    var binaryString = window.atob(res.data.content)
    var len = binaryString.length
    //  Uint8Array: 8位无符号整数值的类型化数组
    var bytes = new Uint8Array(len)
    for (var i = 0; i < len; i++) {
      //  charCodeAt返回字符串第一个字符的 Unicode 编码(H 的 Unicode 值):
      bytes[i] = binaryString.charCodeAt(i)
    }
    const blob = new Blob([bytes.buffer], { type: '.csv' })
    if (window.navigator.msSaveOrOpenBlob) {
      navigator.msSaveBlob(blob)
    } else {
      const elink = document.createElement('a')
      elink.download = '123456.csv'
      elink.style.display = 'none'
      elink.href = URL.createObjectURL(blob)
      document.body.appendChild(elink)
      elink.click()
      document.body.removeChild(elink)
    }
})

如有错误,望请指正。

你可能感兴趣的:(解决前端利用blob下载csv因为多语言导致乱码的问题)