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编码转中文!!!

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

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

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值