首页 > 其他分享 >不同浏览器上中文文件名的下载乱码问题

不同浏览器上中文文件名的下载乱码问题

时间:2024-10-21 14:10:35浏览次数:1  
标签:编码 浏览器 文件名 filename 乱码 ISO new userAgent

浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了。
首先,Content-Disposition值可以有以下几种编码格式
1. 直接urlencode:

    Content-Disposition: attachment; filename="struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm"

2. Base64编码:

    Content-Disposition: attachment; filename="=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?="

3. RFC2231规定的标准:

    Content-Disposition: attachment; filename*=UTF-8''%E5%9B%9E%E6%89%A7.msg

4. 直接ISO编码的文件名:

    Content-Disposition: attachment;filename="测试.txt"

然后,各浏览器支持的对应编码格式为:

1.  IE浏览器,采用URLEncoder编码
2.  Opera浏览器,采用filename*方式
3.  Safari浏览器,采用ISO编码的中文输出
4.  Chrome浏览器,采用Base64编码或ISO编码的中文输出
5.  FireFox浏览器,采用Base64或filename*或ISO编码的中文输出


new_filename = URLEncoder.encode(filename, "UTF8"); 
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的 
rtn = "filename=\"" + new_filename + "\""; 
if (userAgent != null) 

     userAgent = userAgent.toLowerCase(); 
      // IE浏览器,只能采用URLEncoder编码 
     if (userAgent.indexOf("msie") != -1) 
    { 
        rtn = "filename=\"" + new_filename + "\""; 
    } 
     // Opera浏览器只能采用filename* 
     else if (userAgent.indexOf("opera") != -1) 
     { 
        rtn = "filename*=UTF-8''" + new_filename; 
    } 
    // Safari浏览器,只能采用ISO编码的中文输出 
      else if (userAgent.indexOf("safari") != -1 ) 
      { 
          rtn = "filename=\"" + new String(filename.getBytes("UTF-8"),"ISO8859-1") + "\""; 
      } 
      // Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出 
      else if (userAgent.indexOf("applewebkit") != -1 ) 
       { 
         new_filename = MimeUtility.encodeText(filename, "UTF8", "B"); 
          rtn = "filename=\"" + new_filename + "\""; 
       } 
      // FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出 
       else if (userAgent.indexOf("mozilla") != -1) 
       { 
          rtn = "filename*=UTF-8''" + new_filename; 
      } 
   } 

目前,我测试的情况,在几个浏览器上都能正常输入中文文件名
浏览器不同版本,可能还会有乱码的情况.....

标签:编码,浏览器,文件名,filename,乱码,ISO,new,userAgent
From: https://www.cnblogs.com/PengZhao-Mr/p/18489371

相关文章

  • 浏览器H5唤醒支付宝话费充值自动带入手机号
    这个问题困扰了我好些天直至今日终于搞定了,一直在尝试通过支付宝的移动小程序抓取参数结果发现思路完全错误了,给大家演示一下流程用户点击浏览器按钮或者扫描二维码唤醒支付宝(自动带入手机号-我们可以设置带入什么手机号例如13222222222)以下为流程演示首先在平台生成......
  • 浏览器中的 事件循环 event loop
    当浏览器碰到异步代码:异步代码会放到队列。队列有两种。微任务队列和宏任务队列。执行栈与任务队列JS在解析一段代码时,会将同步代码按顺序排在某个地方,即执行栈,然后依次执行里面的函数。当遇到异步任务时就交给其他线程处理,待当前执行栈所有同步代码执行完成后,会从一个队列中去......
  • 批量修改文件夹内各种格式文件名(与文件夹名保持一致)——EXCEL VBA 实现
     如下图:加入我们有3个文件夹,需要将3个文件夹内所有文件名改为与所在文件夹名一致,可用excelvba实现。方法如下: 一、打开此xlsm文件打开excel,  alt+F11快捷键打开代码编辑窗口。二、将文件夹路径修改为你的文件夹路径,如下图:需要重命名的文件夹全部放入一个总文件......
  • Edge浏览器美化及使用教程
    Edge浏览器美化及使用教程右上角设置关闭不需要的界面,建议保留背景和两行快速链接.这样可以屏蔽广告信息,保持清爽.点击浏览器右上角三点,选择设置,找到外观.可以对浏览器按钮进行自定义,推荐打开开始,始终显示前进和拓展,下载.其他根据自己常用设置进行选择,单不推荐设置......
  • 浏览器访问本地资源 - 只能用于测试(把file:///映射为http://)
             ......
  • 浏览器渲染原理,回流,重绘
    浏览器渲染原理,回流,重绘在前端开发中,理解浏览器的渲染原理、回流(Reflow)和重绘(Repaint)是至关重要的。这不仅有助于我们编写高效的代码,还能显著提升页面的性能和用户体验。本文将深入探讨浏览器渲染的核心原理,并详细解析回流和重绘的概念、触发条件以及如何优化。......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-3-启动浏览器(详细教程)
    1.简介 通过前边两篇文章跟随宏哥学习想必到这里已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动两大浏览器。按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome。但是微软已经在Win10中不维护IE浏览器了,用Edge浏览器代替或者兼容IE模式的浏览器,因此宏哥这......
  • 禁止Chrome浏览器自动更新
    转自:https://www.cnblogs.com/zsg88/p/182257551. 禁用自动更新计划任务 按下Win+R,打开运行对话框,输入taskschd.msc,打开"任务计划程序",展开左侧功能树到"任务计划程序库",分两次选择右侧两个GoogleUpdate的任务计划,右键菜单选择"禁用"。 2.禁用自动更新服务 按下Wi......
  • vecode写c++遇到窗口一闪而过+中文乱码咋办
    本人没使用系统cmd窗口,而是使用了vscode内置终端,目的是为了之后输出中文的时候不乱码(vscode是utf-8,cmd是gbk,干脆全部使用vscode,不使用系统cmd作为输出窗口)附上配置文件:launch.json{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解......
  • Linux环境下Matplotlib绘图中文乱码问题
    问题:如图所示,中文乱码1.准备ttf字体文件:路径: C:\Windows\Fonts例如楷体:simkai.ttf2.查看当前环境的matplot字体路径:importmatplotlibprint(matplotlib.matplotlib_fname())运行结果:/home/3kyou/.local/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibr......