java_URL中的URL编码转换成中文

问题描述

上传文件后,获得的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.mfbz.cn/a/407915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React18源码: Fiber树中的全局状态与双缓冲

Fiber树构造 在React运行时中&#xff0c;fiber树构造位于 react-reconciler 包在正式解读 fiber 树构造之前&#xff0c;再次回顾一下renconciler的4个阶段 1.输入阶段&#xff1a;衔接react-dom包&#xff0c;承接fiber更新请求2.注册调度任务&#xff1a;与调度中心(schedu…

HarmonyOS创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 创建卡片。 根据实际业务场景&#xff0c;选择一个卡片模板。 在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单…

QT Widget自定义菜单

此文以设置QListWidget的自定义菜单为例&#xff0c;其他继承于QWidget的类也都可以按类似的方法去实现。 1、ui文件设置contextMenuPolicy属性为CustomContextMenu 2、添加槽函数 /*** brief onCustomContextMenuRequested 右键弹出菜单* param pos 右键的坐标*/void onCusto…

2024如何恢复旧版的Chrome的主题样式

起因 chrome 更新版本之后的主题样式变成了浅紫色的页签卡样式&#xff0c;感觉很不习惯&#xff0c;也很不喜欢 如何换回旧版主题 通过主题商店&#xff0c;安装旧版本的主题 主题商店搜索下面&#xff0c;或着直接访问下面的地址 Chrome Original White Theme https://…

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…

神经网络系列---分类度量

文章目录 分类度量混淆矩阵&#xff08;Confusion Matrix&#xff09;&#xff1a;二分类问题二分类代码多分类问题多分类宏平均法:多分类代码多分类微平均法&#xff1a; 准确率&#xff08;Accuracy&#xff09;&#xff1a;精确率&#xff08;Precision&#xff09;&#xf…

模型评估方式

文章目录 一、有监督-分类模型1、混淆矩阵2、分类模型的精度和召回率3、ROC曲线与AUC 二、有监督-回归模型1、均方误差MSE2、 R 2 R^2 R2决定系数3、回归模型代码示例 三、无监督模型1、kmeans求解最优k值的方法&#xff1a;轮廓系数、肘部法2、GMM的最优组件个数&#xff1a;A…

【Vue3】‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题 今天拿到别人项目的时候&#xff0c;我平时比较习惯用pnpm&#xff0c;我就使用pnpm i先下载依赖包&#xff0c;下载完成后&#xff0c;启动项目&#xff0c;就开始报以下错误&#xff01; 但是当我执行pnpm i的时候&#xff0c;vite不应该就已经被我下载下来了吗 研究了…

线程共享和非共享的资源及线程优缺点

注意&#xff1a;共享的内存地址空间中不包括栈&#xff1b;共享文件描述符表&#xff0c;表示&#xff0c;同一进程中线程可以操作同一文件。

【机器学习】特征工程之特征选择

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【ubuntu】永久修改主机名

文章目录 1. 问题描述2. 解决方案 1. 问题描述 主机名过长&#xff08;后面的部分&#xff09; 2. 解决方案 查看主机名详情 hostnamectl修改指定主机名 hostnamectl set-hostname ubuntu2204 --static登出重进即可

基于java+springboot+vue实现的美食信息推荐系统(文末源码+Lw)23-170

1 摘 要 使用旧方法对美食信息推荐系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在美食信息推荐系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发…

虚拟机安装Docker装载Mysql

目录 1.安装docker 2. docker中安装mysql 1.选择mysql镜像 2.查看镜像 3.启动mysql 4.修改配置 5.进入容器查看配置&#xff1a; 6.设置启动docker时&#xff0c;即运行mysql 1.安装docker SSH 登录到虚拟机: 使用MobaXterm或其他SSH客户端连接到虚拟机&#xff1a; ss…

前后端延迟怎么解决

当今互联网应用的发展越来越迅猛&#xff0c;用户对于网站或应用的性能要求也越来越高。其中一个重要方面就是前后端延迟的解决&#xff0c;也就是减少前端与后端之间的通信时间延迟&#xff0c;提高用户体验。本文将详细介绍如何解决前后端延迟的问题。 网络延迟 数据在网络…

JavaSec 基础之 XXE

文章目录 XMLReaderSAXReaderSAXBuilderDocumentBuilderUnmarshaller**SAXParserFactory**XMLReaderFactoryDigester总结 XMLReader public String XMLReader(RequestBody String content) {try {XMLReader xmlReader XMLReaderFactory.createXMLReader();// 修复&#xff1a…

QoS 服务质量

服务质量 QoS (Quality of Service) 服务质量可用若干基本性能指标来描述&#xff0c;包括&#xff1a;可用性、差错率、响应时间、吞吐量、分组丢失率、连接建立时间、故障检测和改正时间等。 服务提供者可向其用户保证某一种等级的服务质量。 服务性能的总效果&#xff0c;…

Servlet(2)

文章目录 更方便的部署方式安装 Smart Tomcat 插件配置 Smart Tomcat 插件 访问出错怎么办出现 404出现 405出现 500出现 "空白页面"出现 "无法访问此网站" 小结 更方便的部署方式 手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法. 此处我…

算法——排序算法

目录 1、冒泡排序 2、插入排序 3、选择排序 4、归并排序 5、快速排序 6、堆排序 7、计数排序 8、桶排序 9、基数排序 常见的排序算法包括&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Se…

2023年海南房地产经纪机构备案需要具备哪些条件?

房地产业在海南占有非常重要的地位。 同样&#xff0c;海南也有很多房地产中介机构。 那么&#xff0c;2023年海南房产中介登记证如何办理呢&#xff1f; 海南房产中介注册需要什么条件&#xff1f; 办理海南房产中介机构登记需要提交哪些材料&#xff1f; ……今天博宇会计小编…

神经网络系列---归一化

文章目录 归一化批量归一化预测阶段 测试阶段γ和β&#xff08;注意&#xff09;举例 层归一化前向传播反向传播 归一化 批量归一化 &#xff08;Batch Normalization&#xff09;在训练过程中的数学公式可以概括如下&#xff1a; 给定一个小批量数据 B { x 1 , x 2 , … …
最新文章