首页 > 编程语言 >java实现浏览器下载附件时文件名中文乱码解决方案

java实现浏览器下载附件时文件名中文乱码解决方案

时间:2024-03-08 22:23:41浏览次数:28  
标签:编码 浏览器 String UTF 中文名 乱码 str java

方案一:URLEncoder 解决 IE 和 谷歌浏览器的附件中文名问题。
如果客户端浏览器是 IE 浏览器 或者 是谷歌浏览器。我们需要使用 URLEncoder 类先对中文名进行 UTF-8 的编码 操作。 因为 IE 浏览器和谷歌浏览器收到含有编码后的字符串后会以 UTF-8 字符集进行解码显示。

// 把中文名进行 UTF-8 编码操作。
String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8");
// 然后把编码后的字符串设置到响应头中
response.setHeader("Content-Disposition", str);

方案二:BASE64 编解码解决火狐浏览器的附件中文名问题
如果客户端浏览器是火狐浏览器。 那么我们需要对中文名进行 BASE64 的编码操作。
因为火狐使用的是 BASE64 的编解码方式还原响应中的汉字。所以需要使用 BASE64Encoder 类进行编码操作。

// 使用下面的格式进行 BASE64 编码后
String str = "attachment; fileName=" + "=?utf-8?B?"
+ new BASE64Encoder().encode("中文.jpg".getBytes("utf-8")) + "?=";
// 设置到响应头中
response.setHeader("Content-Disposition", str);

方式三(推荐):通过判断请求头中 User-Agent 这个请求头携带过来的浏览器信息即可判断出是什么浏览器,来解决不同编解码方式。

String ua = request.getHeader("User-Agent");
// 判断是否是火狐浏览器
if (ua.contains("Firefox")) {
    // 使用下面的格式进行 BASE64 编码后
    String str = "attachment; fileName=" + "=?utf-8?B?"
        + new BASE64Encoder().encode("中文.jpg".getBytes("utf-8")) + "?=";
    // 设置到响应头中
    response.setHeader("Content-Disposition", str);
} else {
    // 把中文名进行 UTF-8 编码操作。
    String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8");
    // 然后把编码后的字符串设置到响应头中
    response.setHeader("Content-Disposition", str);
}

标签:编码,浏览器,String,UTF,中文名,乱码,str,java
From: https://www.cnblogs.com/lisong0626/p/18060201

相关文章

  • Java核心之细说泛型
    泛型是什么?等你使用java逐渐深入以后会了解或逐步使用到Java泛型。Java中的泛型是JDK5中引入的功能之一。"Java泛型"是一个技术术语,表示一组与定义和使用泛型类型和方法有关的语言特性。在Java中,泛型类型或方法与普通类型和方法的区别在于它们具有类型参数。入门如果仔......
  • java17新特性简单介绍
    前言本项目使用的IDE为IDEA2023.3.3(社区版)。文本块java17之前的写法,双引号需要转义,换行需要\n,需要加号拼接publicclassTestString{publicstaticvoidmain(String[]args){Stringjson="{\n"+"\"id\":\"1\",\n&qu......
  • Java登陆第三十二天——ES6(一)let、const、模板字符串、解构表达式、箭头函数
    所谓ECMAScript6也就是JS6。这次更新带来了大量的新特性,使JS代码更简洁,更强大。复习JS请走:JS入门JS6文档请走:JS6菜鸟教程ES6新增了let和const关键字,用作声明变量let相较于var,let声明的变量更规范。ES6更推荐使用let。let不可重复声明let可以作为成员变量:(let遇见非函数......
  • 熟悉又陌生的JavaWeb 第3天
    传送门Servlet编程第2天的开头部分已经看过Servlet这里再介绍一下注解方式,可以不用配置web.xml使用注解的前提是web.xml的version是4.0(3.0以上应该就行)@WebServlet(name="MyNewServlet",value="/MyNewServlet")publicclassMyNewServletextendsHttpServlet{......
  • JAVA基础--方法
    方法的定义(函数)注意:Java都是值传递语法:修饰符返回值类型方法名(参数类型参数名){...方法体...return返回值;}例子:定义一个求两数最大值的方法publicclassDemo01{publicstaticvoidmain(String[]args){intmax=Max(10,20......
  • JAVA基础--命令行传参
    命令行传参有时希望运行一个程序时再传递给它消息,这需要靠传递命令行参数给main()函数来实现编写以下代码publicclassDemo02{publicstaticvoidmain(String[]args){//args.length数组长度for(inti=0;i<args.length;i++){......
  • JavaScript 打包器esbuild的基础使用
    esbuild是一种类似于webpack的极速JavaScript打包器。esbuild项目主要目标是:开辟一个构建工具性能的新时代,创建一个易用的现代打包器。先安装esbuildnpmiesbuild-g-g代表全局范围检查esbuild的版本esbuild--version命令行构建esbuildsrc\app.jsx--bundle--outfi......
  • php+java加密对接算法
    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/322请求示例:{"appKey":"demo","nonce":"12345","sign":"04a8ba0a19ffc491716131a542729a9c250d84ce4211889a15f920ce974cf23......
  • zsh git Mac终端中文乱码问题
    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/320如果在Mac终端中使用zsh和git时出现中文乱码问题,可以尝试以下解决方法:修改终端字体打开终端,点击菜单栏的“终端”->“偏好设置”,选择“文本”,在“字体”选项中选择一个支......
  • WebRTC 同一个浏览器同一台 无需信令服务 实现视频通话
    这个仅仅是原理告你信令服务的作用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv=&......