java解决中文乱码的几种写法

工作中总会遇到中文乱码问题,以导出文件,文件名称是中文的话,下载下来的文件名称会乱码问题,总结了几种解决文件名乱码的写法,仅供参考。

 首先定义一个汉语字符串

String zhName = "错误码模板";

一、java.net.URLEncoder.encode(zhName, "UTF-8");

这种写法 在谷歌浏览器 、 IE浏览器上,表示很好用。直接解决掉了乱码问题。

但是在火狐浏览器上,导出的文件名没有解码,如下图。

二、new String(zhName.getBytes("UTF-8"),"iso-8859-1");

第二种写法是实例化String,修改编码格式。

经试验,谷歌浏览器,火狐浏览器,都好用。但是IE浏览器又乱码了。

此时有些凌乱了,如何同时兼容三个浏览器呢。接下来上大招。

三、

同时兼容chrome Firefox IE 三个浏览器写法
String zhName = "错误码模板";
String header = request.getHeader("User-Agent").toUpperCase();
if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
zhName = URLEncoder.encode(zhName, "utf-8");
zhName = zhName.replace("+", "%20"); //IE下载文件名空格变+号问题
} else {
zhName = new String(zhName.getBytes(), "ISO8859-1");
}
response.setHeader("Content-Disposition", "attachment;filename="+zhName+ ".txt");

以上,哈哈完美兼容三个浏览器。问题解决。

 

wuli哥哥是傻帽
本文转载于网络 如有侵权请联系删除

相关文章

  • 这本免费小书,带你征服 GitHub!

    这本免费小书,带你征服GitHub!GitHub漫游指南,一本有趣又通俗的GitHub教程,想要成为star之王么?今天给大家分享一份通俗易懂的GitHub学习教程,即《GitHub漫游指南》。看过了不下十套GitHub教程了,小编愿称它为最强!虽然没有GitHub官方文档那么专业,但是这本小书融入了大量作者的思考,更注重实践、且通俗易懂。包含大量实践比如开头作者就分享了自己接触GitHub的故事,非常有代入感。(以下段落摘自这本小书)我与GitHub的故事在我大四找工作的时候,试图去寻找一份硬件、物联网相关的工作(PS:专业是电子信息工程)。尽管简历上写得满满的各种经历、经验,然而并没有卵用。跑了几场校园招聘会后,十份简历(PS:事先已经有心里准备)一个也没有投出去——因为学校直接被拒。我对霸面什么的一点兴趣都没有,千里马需要伯乐。后来,我加入了MartinFlower所在的公司,当然这是后话了。这是一个残酷的世界,在学生时代,如果你长得不帅不高的话,那么多数的附加技能都是白搭(PS:通常富的是看不到这篇文章的)。在工作时期,如果你上家没有名气,那么将会影响你下一份工作的待遇。而,很

  • LeetCode 527. 单词缩写(Trie树)

    文章目录1.题目2.解题1.题目给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写。初始缩写由起始字母+省略字母的数量+结尾字母组成。若存在冲突,亦即多于一个单词有同样的缩写,则使用更长的前缀代替首字母,直到从单词到缩写的映射唯一。换而言之,最终的缩写必须只能映射到一个单词。若缩写并不比原单词更短,则保留原样。示例: 输入:["like","god","internal","me","internet","interval","intension","face","intrusion"] 输出:["l2e","god","internal","me","i6t","interval","inte4n","f2e",&q

  • iOS逆向之ipa签名原理

    前言本篇文章虽然是介绍iOS开发中ipa包的签名原理。但因为签名涉及到密码学中的概念。在了解签名之前,我们需要明确一些概念。密码学中,根据加解密密钥的不同,通常把加密方式分为对称密码(对称加密)和公钥密码(非对称加密)。常见加密算法有:DES、3DES、DESX、AES、RSA、ECC。其中RSA、ECC是非对称加密算法。以下是一些必要的概念。对称密码:又叫做对称加密。加密和解密使用的是同一个密钥。公钥密码:又叫做非对称加密。有一个公钥和一个私钥,公钥和私钥组成一个密钥对。使用私钥加密的数据可以使用公钥解密,反之亦然。混合加密:同时使用对称加密和非对称加密两类算法。消息摘要:通过单向散列函数对消息进行一定的运算,计算出固定长度的结果,就是消息摘要。数字签名:用私钥对消息摘要(又叫哈希值、散列值)进行加密得到的密文就是数字签名数字证书:按照一定格式将明文信息和消息摘要进行打包得到的文件就是证书。中间人攻击:中间人通过在网络中拦截并持有端到端的真实公钥,然后把自己的公钥转发给消息接收者。而后通过公钥拦截解析消息甚至篡改的一种攻击方式。加密对称密码又叫做对称加密,一种加密和解密使用同一个密钥

  • MySQL 子查询

    什么是子查询?如果一个select语句能够返回单个值或者一列值,且该select语句嵌套在另一个SQL语句中,那么该select语句称为子查询,通常将子查询写在小括号内。例如,通过子查询找到张三的年龄,再去与外层查询的age字段比较,得到结果;select*from表whereage (selectagefrom表wherename='张三');复制对子查询返回的数据结果分类,可以分为表子查询(单行或多行数据),列子查询(某列数据),和标量子查询(具体某个值)。集合比较子查询通过子查询返回相同数据类型的数据集合进行比较,通常与比较操作符(>,<,=,!=,<>)搭配使用。IN判断是否在集合中例:SELECT*FROMAWHEREccIN(SELECTccFROMB)复制ANY需要与比较操作符一起使用,与子查询返回的任何值做比较例:SELECT*FROMAWHEREcc>any(SELECTccFROMB) #理解为,大于集合中任意一个值即为True复制ALL需要与比较操作符一起使用,与子查询返回的所有值做比较例:SELECT*FROMA

  • 搜索+信息流之争的本质:流量巨头们的生态效率法则

    詹姆斯·格雷克在《信息简史》中说,“应对信息过剩的策略多种多样,但归根结底,本质上可归为两类:要么是过滤,要么是搜索。当信息变得廉价时,注意力就变得昂贵了。”这个年头最贵的不是黄金,也不是石油,而是你的注意力。根据Morketing盘点了2019年全年的互联网企业广告营销收入数据统计显示,2019年百度广告营收为781亿元,腾讯广告营收为683.77亿元,字节跳动广告营收达到1500亿元。与此营收排名极其相似的另一个事实是,在各自信息流产业务方面,字节跳动做信息流最早,百度次之,腾讯最后。扎克伯格也许没有想到,当Facebook在互联网营销中首次提出信息流概念数年之后,在遥远的东方,一家广告营收为1500亿的公司就此诞生。事实上,以算法为核心的信息流产品时至今日,已经逐渐“本土化”,随着百度APP月活的增长,人们再次聚焦搜索技术的价值,于是,搜索+信息流成为另一条火热且诱人的赛道。1信息流+搜索赛道字节的进击,腾讯的隐忍2月28日,字节跳动推出“头条搜索”App,Slogan为“头一条就是你想搜的”,并相继与各大安卓应用商店上线。张一鸣曾在去年公开表示:“如果没有搜索场景的拓展和优质内

  • Python的定时器

     在实际应用中,我们经常需要使用定时器去触发一些事件。Python中通过线程实现定时器timer,其使用非常简单。看示例:importthreading deffun_timer(): print('HelloTimer!') timer=threading.Timer(1,fun_timer) timer.start()复制输出结果:Hello Timer!Process finished with exit code 0复制 注意,只输出了一次,程序就结束了,显然不是我们想要的结果。看Timer类中的解释性描述:"""Callafunctionafteraspecifiednumberofseconds"""复制 一段时间后调用一个函数,但并没有说要循环调用该函数。因此,修改如下:deffun_timer(): print('HelloTimer!') globaltimer timer=threading.Timer(5.5,fun_timer) timer.start()

  • JAVAWEB复习day01

    一、基础知识1.一个html文件开始和结束的标签<html></html>2.html的两部分<head>设置相关信息</head>,<body>页面的内容显示都写在这里</body>3.html的代码不区分大小写的4.<br/>换行,<hr/>换行且有下划线。这两个都是没有结束标签的。5.如果图片在所有目录的上层目录day01,怎么表示上层目录../,怎么表示上层的上层../../6.超链接<ahref="链接到资源的路径“>显示在页面上的内容</a>当超链接不需要任何的地址可以加一个#,<ahref="#“>这是一个超链接</a>href:链接的资源的地址target设置打开的方式,默认是在当前页打开target="_self",target=“_blank"在一个新窗口打开7.定位资源定义一个位置<aname="top">顶部</a>回到这个顶部

  • (二十二) 初遇python甚是喜爱之re正则表达式学习

    各位读者大大们大家好,今天学习python的re正则表达式模块,并记录学习过程欢迎大家一起交流分享。新建一个python文件命名为py3_re.py,在这个文件中进行操作代码编写:importre #以下代码涉及到的正则表达式语法 #在文章后面会有具体的图片解释 #先看代码过程^^ #代码和注释略多 #耐心看下去 #重新认识正则表达式 #定义一个字符串 text_to_search=''' abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 HaHaHa python.com 123-555-4321 123.555.1234 123*555*1234 8000-123-1234 9000-234-5678 Mr.Shally MrSmith MsLily Mrs.Robinson Mr.T ''' #正常情况下转义字符\t\n等 #python会自动解析 #比如: print('\tTab')#Tab #正常输出一个t

  • C-Linux_毫秒级随机值获取

    秒级随机值-常用方法:#include<stdlib.h> #include<stdio.h> #include<stdio.h> #include<time.h> intmain(void) { intbuf[10],i,j; srand((unsigned)time(NULL)); for(i=0;i<10;i++) { buf[i]=rand()%100; printf("%d",buf[i]); } printf("\n"); return0; }复制上面的srand((unsigned)time(NULL));表示给rand()产生随机值的种子.其中(unsigned)time(NULL)则将当前时间转为一个正整数,也就是说,如果我们如果在小于1秒之内多次运行该代码,则随机值都是相同的.编译运行-如下图所示,可以看到如果运行时间小于1秒时,则随机值都是相同的:毫秒级实现可以通过ftime()函数来获取timeb结构体,既可实现毫秒级随机数变化了其中ftime()函数如下:intf

  • 资源 | 23种Pandas核心操作,你需要过一遍吗?

    由 机器之心授权转载,禁止二次转载 Pandas是一个Python软件库,它提供了大量能使我们快速便捷地处理数据的函数和方法。一般而言,Pandas是使Python成为强大而高效的数据分析环境的重要因素之一。在本文中,作者从基本数据集读写、数据处理和DataFrame操作三个角度展示了23个Pandas核心方法。Pandas是基于NumPy构建的库,在数据处理方面可以把它理解为NumPy加强版,同时Pandas也是一项开源项目。它基于Cython,因此读取与处理数据非常快,并且还能轻松处理浮点数据中的缺失数据(表示为NaN)以及非浮点数据。在本文中,基本数据集操作主要介绍了CSV与Excel的读写方法,基本数据处理主要介绍了缺失值及特征抽取,最后的DataFrame操作则主要介绍了函数和排序等方法。基本数据集操作(1)读取CSV格式的数据集pd.DataFrame.from_csv(“csv_file”)复制或者: pd.read_csv(“csv_file”)复制(2)读取Excel数据集 pd.read_excel("excel_file")复制(3)将Da

  • 在VirtualBox上使用Bosh部署Zookeeper集群

    安装VirtualBox略$VBoxManage--version 5.1.22r115126复制安装Bosh$wget-chttps://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-2.0.48-linux-amd64 $chmod+xbosh-cli-* $sudomvbosh-cli-*/usr/local/bin/bosh复制安装完成后运行下面命令确认安装成功$bosh-v version2.0.48-e94aeeb-2018-01-09T23:08:07Z Succeeded复制$boshenvironments URLAlias 0environments Succeeded复制安装依赖库$sudoyuminstallgccgcc-c++rubyruby-develmysql-develpostgresql-develpostgresql-libssqlite-devellibxslt-devellibxml2-develpatchopenssl $geminstallyajl-ruby复制安装后检查安装是否成功$ruby

  • PXE批量部署linux操作系统

    前言在实际生产环境中,有时候我们会碰到为几十上百甚至上千台服务器安装Linux操作系统的需求,如果我们还是常规的去使用移动介质逐台安装,显然是一件低效又令人抓狂的事情,那要安装到何年何月啊?这对于我们追求高逼格形象的技术人员来讲当然是不可以接受的,为此,pxe模式批量部署系统应运而生。 原理 我们知道,当我们使用其它引导介质(例如硬盘、软盘、U盘、CD或者DVD)安装操作系统时,是加载其首个扇区中MBR(主引导目录)中的引导程序并利用其查找各自介质中的必需数据来完成的。而pxe则是通过自带pxebootrom的网卡使用TFTP(简单文件传输协议)和DHCP(动态主机配置协议)从网络服务器上查找并装载引导程序和必需的数据来完成系统的安装的。下面让我们通过实验来进一步理解其安装过程。 实验环境:vmwareWorkstation10、CentOS-6.5-x86_64 1、配置DHCP服务 1、配置/etc/sysconfig/network-scripts/ifcfg-eth0将网卡设置为开机启动,地址配置为静态(服务器一般设置为静态ip地址)。 2、关掉防火墙以免对实验带来不必要的麻

  • Moosefs分布式文件系统集群讲解配置

    MFS的官方网站为http://www.moosefs.org,详细信息您可以去官网进行更多的了解,在这里我只将简单的知识和大家分享。MFS的网络组成有三部分,MasterServer;ChunkServer;Client.其中ChunkServer和Client可以有多个,而Master主控端只能一个。MFS文件系统结构:1管理服务器(master-server):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝2元数据日志服务器(changelog-server):负责备份master服务器的变化,(一般情况下可以和管理服务器放在一起)文件类型为changelog_ml.*.mfs,以便于在masterserver出问题的时候接替其进行工作3数据存储服务器(chunk-server):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.4客户端(clients):通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.MFS文件系统的写原理:MFS文件系统的读原理

  • 多线程之ForkJoin框架[通俗易懂]

    大家好,又见面了,我是你们的朋友全栈君。Fork/Join框架是Java7提供了的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。工作窃取算法工作窃取算法:通过此算法降低线程等待和竞争。工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。那么为什么需要使用工作窃取算法呢? 假如我们需要做一个比较大的任务,我们可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,于是把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应,比如A线程负责处理A队列里的任务。但是有的线程会先把自己队列里的任务干完,而其他线程对应的队列里还有任务等待处理。干完活的线程与其等着,不如去帮其他线程干活,于是它就去其他线程的队列里窃取一个任务来执行。而在这时它们会访问同一个队列,所以为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务的线程永远从双端队列的尾部拿任务执行(当一个工作线程中没有任务时,

  • 腾讯云云数据库MySQL修改参数模板api接口

    1.接口描述接口请求域名:cdb.tencentcloudapi.com。 该接口(ModifyParamTemplate)用于修改参数模板,全地域公共参数Region均为ap-guangzhou。 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:ModifyParamTemplate。 Version 是 String 公共参数,本接口取值:2017-03-20。 Region 是 String 公共参数,详见产品支持的地域列表,本接口仅支持其中的:ap-guangzhou。 TemplateId 是 Integer 模板ID。 Name 否 String 模板名称,长度不超过64。 Description 否 Stri

  • 腾讯云云监控创建Grafana告警通道api接口

    1.接口描述接口请求域名:monitor.tencentcloudapi.com。 创建Grafana告警通道 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:CreateGrafanaNotificationChannel。 Version 是 String 公共参数,本接口取值:2018-07-24。 Region 是 String 公共参数,详见产品支持的地域列表,本接口仅支持其中的:ap-beijing,ap-chengdu,ap-chongqing,ap-guangzhou,ap-hongkong,ap-mumbai,ap-nanjing,ap-shanghai,ap-shanghai-fsi,ap-shenzhen-fsi

  • hdu_1565(网络流)

    解法一、网络流 相邻的点染不同颜色:   (行数+列数)为奇数的染成白色,(行数+列数)为偶数的染成白色 source=0,sink=n*n+1. source到每个白点连接,流量为白点的值 黑点到sink连接,流量为黑点的值 每个白点与其周围的黑点连接,流量为INT_MAX 所有点的值的总和-最大流量=所求答案   以下是抄来的原理:   点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该集合内。   最小点权覆盖集:在带点权无向图G中,点权之和最小的覆盖集。   点独立集:无向图G的一个点集,使得任两个在该集合中的点在原图中都不相邻。  最大点权独立集:在带权无向图G中,点权之和最大的独立集。   定理:    1.二分图的最小点权覆盖集=最小割=最大流    2.二分图的最大点权独立集=总权-最小点权覆盖集   1#include<cstdio> 2#include<climits> 3#include<cstring> 4#include<queue> 5 6#defineMAXN20 7 8

  • 扫描线

    港真考试之前我以为自己是会扫描线的QAQ、、、 然后就被ta的板子锤自闭了。。。 不知道是哪里来的错觉。。。 矩形周长 扫描线的时候存一下这个节点被覆盖了多少次(!! 然后就可以求长度和修改啦 横向扫一遍,纵向扫一遍就是整个周长 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #defineM10001 #defineMPmake_pair usingnamespacestd; intn,m,k,len[1000001],num[1000001],ans,z; vector<pair<int,int>>qb[100001],qe[100001]; structvv { intl1,l2,r1,r2; }a[1000001]; voidadd(intnow,intl,intr,intL,intR,intz) { if(l>=L&&r<=R)

  • 单链表的反转是常见的面试题目

    转自https://www.cnblogs.com/byrhuangqiang/p/4311336.html 单链表的反转是常见的面试题目。本文总结了2种方法。 1定义 单链表node的数据结构定义如下: classListNode{ intval; ListNodenext; ListNode(intx){ val=x; next=null; } }复制 2方法1:就地反转法 2.1思路 把当前链表的下一个节点pCur插入到头结点dummy的下一个节点中,就地反转。 dummy->1->2->3->4->5的就地反转过程: dummy->2->1->3->4->5dummy->3->2->1->4->5dummy->4>-3->2->1->5dummy->5->4->3->2->1 2.2解释 1初始状态 2过程 pCur是需要反转的节点。 prev连接下一次需要反转的节点 反转节点pCur 纠正头结点dummy的指

  • 下阶段工作安排

    一、可修改内容 1.武将属性数据(1)事件、告白触发后武将数据修改(2)装备强化后,武将数据更新 (3)天书列表、主页增加皇冠 (4)俘虏界面数值调整 2.通用化 (1)活动主逻辑切换通用化(2)天书主界面滑动功能 3.因加入将魂导致的修改 (1)合体系统逻辑重新调整 (2)涉及获得新武将判断将魂,将魂出现动画,求将动画、获得新武将(合体、招募、闯关俘虏、扭蛋)   二、待完整策划案功能 1.转生系统 (1)转生逻辑 (2)转生动画 2.天书告白系统 3.求将界面通用性,连抽动画,最大连抽次数、显示卡牌规则、抽取送礼   三、待开发功能1.天书扮演者信息接口 2.充值系统

  • 英语词组/短语-20211229

    addfueltothecar给车加油 leanforward前倾 woodenframe木质画框 writehisfather'ssignature签了他爸爸的名字 workforceaccount劳动力人数 violentpicture暴力画面 negativeeffect负面影响 environmentalprotection环境保护 loseweightthroughexercise通过锻炼减肥 giveourthumbsup竖起大拇指 本文来自博客园,作者:草叶睡蜢,转载请注明原文链接:https://www.cnblogs.com/tjubuntu/p/15773600.html

相关推荐

推荐阅读