下载文件时不能显示中文

2024-09-07 08:38
文章标签 显示 中文 不能 下载

本文主要是介绍下载文件时不能显示中文,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前段时间做了个下载图片功能,功能做完后本地测试没有任何问题,但是在Linux下却不能显示中文文件名称,纳闷了,经过反复思考,问题得以解决,特此分享,上代码

@Action(value = "download")public String download() throws IOException {// 创建Httpclient对象RequestParams requestParams = createRequestParams();String fileName = requestParams.getQueryValue("fileName");String objectNameReq = requestParams.getQueryValue("objectName");String decode = requestParams.getQueryValue("decode");if(StringUtils.isEmpty(objectNameReq)){logger.error("objectName 不能为空!");throw new NovatarRuntimeException("objectName 不能为空!");}HttpServletResponse response = ServletActionContext.getResponse();ServletOutputStream os = response.getOutputStream();HttpServletRequest request = ServletActionContext.getRequest();if(StringUtils.isNotEmpty(decode)&&decode.equals("true")){objectNameReq = SupplierUtil.decryptField(objectNameReq);//+fileName;// 判断是否为以前的nas盘if(objectNameReq.contains("/nfsc/TRTMS_GROUND/"))objectNameReq = objectNameReq.replace("/nfsc/TRTMS_GROUND/", "");if(!objectNameReq.contains(".app")){String prix = "jpg";if(!fileName.isEmpty()) prix = fileName.substring(fileName.lastIndexOf(".")).replace(".", "");objectNameReq += "/file" + "."+prix;}}else{if(StringUtils.isEmpty(fileName)){List<String> list = Arrays.asList(objectNameReq.split("/"));fileName = list.get(list.size() - 1);}fileName = StringUtils.isEmpty(fileName) ? UUID.randomUUID().toString() : fileName;objectNameReq = objectNameReq.substring(0,objectNameReq.lastIndexOf("/"))+"/"+fileName;}String objectNameReqEncoding = getEncoding(objectNameReq);if(StringUtils.isNotEmpty(objectNameReqEncoding) && !objectNameReqEncoding.equals("UTF-8")){objectNameReq = new String(objectNameReq.getBytes("UTF-8"),"UTF-8");objectNameReq = URLEncoder.encode(objectNameReq,"UTF-8");}objectNameReq = objectNameReq.replaceAll(" ", URLEncoder.encode(" ","UTF-8"));CFSClient client = new CFSClient(gwUrl);try{byte[] bytes = client.getObject(objectNameReq);/*String encoding = getEncoding(fileName);if(StringUtils.isNotEmpty(encoding) && !encoding.equals("UTF-8")){fileName = new String(fileName.getBytes("UTF-8"),"UTF-8");fileName = URLEncoder.encode(fileName,"UTF-8");}*/fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");fileName=fileName.replace('+', ' ');response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);response.setHeader("Content-Disposition", "attachment;filename= "+ fileName);os.write(bytes);response.flushBuffer();} catch (Exception e){throw new NovatarRuntimeException("文件/图片不存在");} finally {if(os != null){os.close();}}return null;}

一开始是 这样

String encoding = getEncoding(fileName);
if(StringUtils.isNotEmpty(encoding) && !encoding.equals("UTF-8")){fileName = new String(fileName.getBytes("UTF-8"),"UTF-8");fileName = URLEncoder.encode(fileName,"UTF-8");
}

理由是先判断字符类型,然后转换为utf-8,因为服务器上的字符编码也是utf-8 ,这样就不会有问题,没成想最后却是失败。
之后就改成

fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
fileName=fileName.replace('+', ' ');

fileName = new String(fileName.getBytes(“UTF-8”), “ISO8859-1”); 这样写的理由我没找到答案,但是结果却让我惊呆了。
至于 fileName=fileName.replace(’+’, ’ '); 这个则是替换空格

这篇关于下载文件时不能显示中文的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144598

相关文章

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr