java_URL中的URL编码转换成中文

news2024/10/7 4:35:07

问题描述

上传文件后,获得的URL中包含了URL编码,导致在前端展示文件名时出现乱码
文件名称显示问题

最终效果

文件名正确显示

解决思路:

1、先按照英文逗号切割URL
2、截取字符串中URL编码部分(含后缀名)
3、使用正则匹配截取到的字符串中的URL编码
4、转换URL编码为中文,同时拼接后缀,生成文件名,并将文件名放入List中
5、返回List给前端,前端有序展示


解决方案:

示例代码

	// URL编码转换
    public static void main(String[] args) {
        // 原始URL字符串
        String url=
                "http://mail-crm.oss-cn-shenzhen.aliyuncs.com/%E6%88%90%E5%93%81%E7%BC%96%E7%A0%81%E5%88%97%E8%A1%A8%20(1)-1708652229511.zip," +
                "http://mail-crm.oss-cn-shenzhen.aliyuncs.com/%E4%B9%90%E5%85%B6%E4%BB%B7%E5%80%BC%E8%A7%82%E6%A1%8C%E9%9D%A2-4-1708652279943.jpg," +
                "http://mail-crm.oss-cn-shenzhen.aliyuncs.com/%E7%9A%84%E7%82%B9%E7%82%B9%E6%BB%B4%E6%BB%B4%E5%A4%9A%E5%A4%9A-1708653161697.jpg," +
                "http://mail-crm.oss-cn-shenzhen.aliyuncs.com/Video_1(9)-1708653828760.mov";

        // 按照英文","切割并转成list
        String[] split = url.split(",");
        List<String> urlStrs = Arrays.asList(split);

        try {
            // 这个正则表达式匹配最后一个斜杠之后的所有字符,包括文件后缀 
            String regex="/(%[0-9A-Fa-f]{2})+";
            Pattern pattern = Pattern.compile(regex);
            List<String> fileNames=new ArrayList<>();
            for (int i = 0; i < urlStrs.size(); i++) {
                String urlStr = urlStrs.get(i);
                System.out.println("第" + (i + 1) + "次开始匹配,当前匹配URL字符串:" + urlStr);
                
                // 使用正则表达式匹配URL编码部分和文件后缀
                Matcher matcher = pattern.matcher(urlStr);
                if (matcher.find()) {
                    // 获取匹配的整个文件名(包括编码部分和后)
                    String encodedFilename = matcher.group();
                    System.out.println("匹配的URL编码部分:" + encodedFilename);

                    // 解码URL编码部分  
                    String decodedFilename = URLDecoder.decode(encodedFilename, "UTF-8");

                    // 获取文件后缀(最后一个点之后的部分)  
                    int lastDotIndex = urlStr.lastIndexOf('.');
                    String fileExtension = (lastDotIndex > 0) ? urlStr.substring(lastDotIndex) : "";
                    System.out.println("当前文件名的后缀:" + fileExtension);

                    // 拼接解码后的文件名和文件后缀  
                    String finalFilename = decodedFilename + fileExtension;

                    // 输出最终的文件名  
                    String replaceResult = finalFilename.replaceFirst("/", "");
                    System.out.println("输出最终的文件名:" + replaceResult.trim());
                    fileNames.add(replaceResult);
                } else {
                    // 使用lastIndexOf方法找到最后一个斜杠和最后一个点号的位置  
                    int lastSlashIndex = urlStr.lastIndexOf('/');
                    
                    // 如果找到了斜杠,则提取斜杠之后的所有内容作为文件名(包括后缀)  
                    if (lastSlashIndex != -1) {
                        String filename = urlStr.substring(lastSlashIndex + 1);
                        
                        // 输出处理后的文件名(包含后缀)  
                        System.out.println("文件名(包括后缀): " + filename);
                        
                        fileNames.add(filename);
                    }
                }
            }

            System.out.println("fileNames:"+ JSONObject.toJSON(fileNames));
            
        } catch (Exception e) {
            System.out.println("解析异常:" + e.getMessage() + "," + e);
        }
    }	

示例代码运行结果

到此,已经解决URL编码转中文!!!

示例代码已经说的很详细了,这里不把调用代码贴出来

原创不易,望一键三连 (^ _ ^)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建一个基于Node.js的实时聊天应用

在当今数字化社会&#xff0c;实时通讯已成为人们生活中不可或缺的一部分。无论是在社交媒体平台上与朋友交流&#xff0c;还是在工作场合中与同事协作&#xff0c;实时聊天应用都扮演着重要角色。与此同时&#xff0c;Node.js作为一种流行的后端技术&#xff0c;为开发者提供了…

1TB! 台湾最新倾斜摄影3DTiles数据分享

之前的文章分享了546GB香港倾斜摄影3DTiles数据&#xff0c;主要是验证倾斜模型3DTiles转换工具的生产效率和数据显示效率&#xff0c;结果对比可以看出无论是数据生产速度以及成果数据显示效率上&#xff0c;都优于其他两种技术路线。最近使用倾斜模型3DTiles工具生产了台湾地…

Spring 手动实现Spring底层机制

目录 一、前言 二、Spring底层整体架构 1.准备工作 : 2.架构分析 : &#xff08;重要&#xff09; 3.环境搭建 &#xff1a; 三、手动实现Spring容器结构 1.自定义注解 : 1.1 Component注解 1.2 Scope注解 2.自定义组件 : 3.自定义用于封装Bean信息的BeanDefinition类&a…

STM32 SPI(基础概念)

文章目录 前言一、SPI通信协议概述二、SPI硬件框图和软件层次三、SPI通信时序四、SPI控制器总结 前言 本篇文章来给大家讲解一个非常重要的通信协议SPI&#xff0c;SPI在MCU和外设之间的通信用的是非常多的&#xff0c;这篇文章将带大家先来学习SPI的一些概念。 一、SPI通信协…

alist修改密码(docker版)

rootarmbian:~# docker exec -it [docker名称] ./alist admin set abcd123456 INFO[2024-02-20 11:06:29] reading config file: data/config.json INFO[2024-02-20 11:06:29] load config from env with prefix: ALIST_ INFO[2024-02-20 11:06:29] init logrus..…

《TCP/IP详解 卷一》第3章 链路层

目录 3.1 引言 3.2 以太网 3.3 全双工 省点 自动协商 流量控制 3.4 网桥和交换机 3.5 WiFi 3.6 PPP协议 3.6.1 PPP协议流程 3.7 环回 3.8 MTU和路径MTU 3.9 隧道基础 3.9.1 GRE 3.9.2 PPTP 3.9.3 L2TP 3.10 与链路层相关的攻击 3.11 总结 3.1 引言 城域网&…

2024年1月京东洗衣机行业数据分析:TOP10品牌销量销额排行榜

鲸参谋监测的京东平台1月份洗衣机市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台显示&#xff0c;今年1月份&#xff0c;京东平台上洗衣机的销量约160万件&#xff0c;环比上个月增长约42%&#xff0c;同比去年下滑7%&#xff1b;销售额约28亿元&#xff0c;环比…

Java零基础 - 三元运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具

下载地址&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…

强大的文本绘图——PlantUML

PlantUML是一款开源工具&#xff0c;它允许用户通过简单的文本描述来创建UML图&#xff08;统一建模语言图&#xff09;。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言&#xff08;DSL&#xff09;&am…

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试,发布到CSDN

效果图 设备树代码 myplatform{compatible "hqyj,myplatform";led1-gpio<&gpioe 10 0>;led2-gpio<&gpiof 10 0>;led3-gpio<&gpioe 8 0>; interrupt-parent <&gpiof>;interrupts<9 0>;reg<0X12345678 …

idea在工具栏中显示快速创建包和类的图标

一、效果图 点击需要创建包或者类的位置&#xff0c;在点击对用的图标就可以快速创建类或者包了。 二、设置 步骤一 View-->Appearance-->Toolbar 步骤二 File-->Settings-->Appearance & Behavior-->Menus and Toolbars-->Main Toolbar-->----…

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…

在Ubuntu系统下搭建TDengine集群

目录 一、Ubuntu虚拟机创建 二、系统相关配置 1、设置系统hostname 2、网络配置及IP规划 3、配置FQDN&#xff08;etc/hosts&#xff09; 4、服务端口设置 三、TDengine server安装 1、服务安装 2、修改配置 3、启动taosd 4、服务卸载 四、客户端安装 1、client安…

密评技术要求实施详解:每一步都关键

密评简介 密评定义&#xff1a;全称商用密码应用安全性评估, 是对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估的活动。 评测依据&#xff1a;GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》。 密评对象&…

(done) 什么是特征值和特征向量?如何求特征值的特征向量 ?如何判断一个矩阵能否相似对角化?

什么是齐次方程&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频&#xff1a;https://www.bilibili.com/video/BV…

【MATLAB】CEEMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMD_MFE_SVM_LSTM神经网络时序预测算法是一种结合了多种先进技术的复杂预测方法&#xff0c;旨在提高时序预测的准确性和稳定性。下面是对该算法的详细介绍&#xff1a; CEEMD&#xff…

基于Java+SpringBoot+Vue前后端分离婚纱影楼管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容&#xff1a;SpringBoot、Vue、SSM、HLM…

【监督学习之决策树和随机森林】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱决策树&#xff08;Decision Tree&#xff09;随机森林&#xff08;Random Forest&#xff09; 简述概要 了解决策树和随机森林 知识图谱 决策树和随机森林都是机器学习中常用的算法&#xff0c;它们在处…

.net core wbeapi 关于swagger的配置

当创建好一个webapi之后&#xff0c;在Program.cs中注释掉原本的AddSwaggerGen&#xff0c;修改为如下配置 Program.cs //builder.Services.AddSwaggerGen();builder.Services.AddSwaggerGen(options >{options.SwaggerDoc("v1", new OpenApiInfo{Version "…