首先,我很确定这不是重复,因为我已经在StackOverflow和其他地方研究了这个主题很长一段时间.已经提出了类似的问题,但没有人得到满意的回答.

过去的相关(但不完全相同)问题:

我也完全了解使用HTTP标头中的文件名完全没必要的mod_rewrite技巧.但我们假设这不是一个选择.

大多数现代浏览器(IE9 +,Firefox,Chrome)在下载名称中包含非ASCII字符的文件时都支持RFC2231/5987.在这些情况下,以下PHP代码就像一个魅力:

header("Content-Disposition: attachment; " .

"filename*=UTF-8''" . rawurlencode($filename));

IE <= 8不了解RFC2231/5987,但以下代码大部分时间都有效.由于每个浏览器都试图在某种程度上模拟IE,这也适用于许多其他浏览器,例如Firefox.

header("Content-Disposition: attachment; " .

'filename="' . rawurlencode($filename) . '"');

同时,Chrome <11和Safari <6似乎更喜欢以下内容,尽管它将非ASCII字符直接放在标题中.

header("Content-Disposition: attachment; filename=" . $filename);

到现在为止还挺好.

但是,当谈到Android的默认浏览器应用程序时,一切都崩溃了.(到目前为止,我已经在姜饼,冰淇淋三明治和果冻豆中进行了测试.)

如果您给它标准的RFC2231/5987处理,默认浏览器完全忽略它并尝试从URL的最后部分猜测文件名.

如果你给它通常的非标准(IE <= 8)处理,默认浏览器会尝试将文件名解释为ISO-8859-1,导致无法理解的字符混乱,或者它会以静默方式丢弃所有非ASCII字符.版本之间的确切行为有所不同,但无论如何,很明显Android的默认浏览器也不支持rawurlencode()格式.

如果将原始文件名放在标题中,则会发生同样的情况.

这通常不是第三方浏览器的问题,例如Firefox for Android,Dolphin Browser和Boat Browser.默认浏览器应用程序是唯一一直无法理解UTF-8文件名的应用程序.

也许这最终在Android的最新版本中得到了修复,或者可能会在下一个版本中修复.但这不是我的问题.我需要这个在现有设备中工作,并且仍然有数百万个Gingerbread和ICS设备.

我已经阅读了错误报告,我已经阅读了投诉,我已经阅读了很多关于这个问题的内容.到目前为止,我一直无法找到任何实际有效的编码方案.

如果有人知道如何在**标头中编码非ASCII文件名**(例如????????????.jpg)并让Android默认浏览器识别它,请分享!我不在乎它是多么hacky或非标准.我不关心是否需要针对每个Android版本进行自定义. Content-Disposition

更新

不幸的是,到目前为止,我还没有收到任何能够解决上述问题的答案.所以赏金到期无人认领.请不要回答,除非您确实知道如何以ICS之前的Android浏览器识别的方式编码非欧洲混合语言文件名,或者您有确凿的证据表明这是不可能的.

android 文件名 标题,有什么方法可以让Android的默认浏览器识别Content-Disposition:attachment下载中的非ASCII文件名?...相关推荐

  1. H3C模拟器中文路径问题(提示:“当前系统用户名中包含非ASCII字符”! )方法尝试:

    H3C模拟器中文路径问题(提示:"当前系统用户名中包含非ASCII字符"! )方法尝试: 我的电脑->属性->高级系统设置->高级->环境变量,分别点击TM ...

  2. android软件的data使用方法,实例讲解Android中SQLiteDatabase使用方法

    SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大 ...

  3. android设备id完美解决方法,如何在Android中获取唯一的设备硬件ID?

    您可以在下面的链接中查看此博客 [http://android-developers.blogspot.in/2011/03/identifying-app-installations.html] A ...

  4. android application 方法,Android Studio新建Android application配置的详细方法

    Android Studio如何新建Android application配置呢?下面是小编介绍的Android Studio新建Android application配置的详细方法,有需要的小伙伴一 ...

  5. Android 5.x 权限问题解决方法

    Android 5.x 权限问题解决方法               一.  android 5.x开始,引入了非常严格的selinux权限管理机制,我们经常会遇到因为selinux权限问题造成的各种 ...

  6. android 恢复出厂设置流程分析,基于Android系统快速恢复出厂设置方法实现.doc

    基于Android系统快速恢复出厂设置方法实现 基于Android系统快速恢复出厂设置方法实现 摘 要:针对使用Android系统的智能电视进行恢复出厂设置时重置速度慢的情况进行了研究和分析,从其重置 ...

  7. Android Studio生成错误日志方法

    Android Studio生成错误日志方法 Use the Android Debugger to get a crash dump. On the Android device navigate ...

  8. java 判断非ascii字符_文件名中的JavaMail和非ASCII字符

    我可以在 JavaMail中发送具有非ascii文件名的附件,但我无法下载它们.我特意为那些文件名包含非ascii字符的附件获取java.io.FileNotFoundException. 仅供参考: ...

  9. Android自定义View的实现方法,带你一步步深入了解View(四)

    不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程.视图的状态及重绘等知识,算是把View中很多重要的知识 ...

最新文章

  1. mysql 安装 运维_MySQL自动化运维之安装篇
  2. 工业机器人入门实用教程_机器学习实用入门
  3. java程序服务不能启动不了_JavaService.exe注册的windows服务无法启动问题
  4. Python解决 Cannot uninstall 'pyparsing' 问题
  5. java怎么申请变量_java怎么声明变量
  6. android 相对布局例子代码
  7. 云原生是趋势吗?学习 K8s 和 Docker 的意义在哪里?
  8. 千亿企业的真实业务思考,名校大厂高手同台 PK,“马栏山杯”国际音视频算法大赛来袭!...
  9. Android SurfaceFlinger vsync信号产生与分发
  10. iOS-详解没有dSYM文件 如何解析iOS崩溃日志
  11. 拷贝和引用有什么区别php,php引用和拷贝的区别知识点总结
  12. 使用朴素贝叶斯进行个人信用风险评估
  13. 短距离无线通讯-NFC
  14. html画圆圈原理,HTML5如何划线和画圆
  15. SpringBoot写一个聊天工具
  16. 关于低噪声放大器的ADS设计和仿真
  17. 3D视觉(六):PnP问题(pespective-n-point)
  18. 百度云视频利用chrome进行倍速播放
  19. android KeyCode专题
  20. SSL服务器认证过程!

热门文章

  1. java前后端分离的实现方式_采用前后端分离的方式进行开发,实现了几种常用的文件上传功能...
  2. python怎么发送邮件_python中是如何借助smtp协议发送邮件的?
  3. python调包侠_拒绝调包侠,不需要高级算法和数据结构技巧
  4. python设计抽奖游戏 球_python3实现小球转动抽奖小游戏
  5. pytorch支持java吗_5分钟!用Java实现目标检测 (PyTorch)
  6. 高度可扩展的类脑神经拟态硬件,完成了字母识别和人脸识别
  7. 实时检测神经振荡可实现行为相关的神经反馈
  8. R显卡VR性能如何?AMD发布 VRMark Cyan Room 测试结果
  9. centos apache php mysql zend_CentOS 5.5搭建Apache+PHP5.2x+MySQL5+Zend3(yum安装)
  10. 格灵深瞳开盘破发,市值73亿,创始人曾是谷歌眼镜创始成员