首页 > 其他分享 >url编码与解码

url编码与解码

时间:2024-09-23 13:46:03浏览次数:8  
标签:编码 java String 字符 url 解码 URL

1 概述

最近写sky-takeout,将其中的oss换成了minio,本来万事顺利,但是测试的时候发现删除功能无法生效,对象文件一直好好的保存着,怎么删都删不掉!一开始我一直以为是删除权限的问题,但是网上一直搜索,总是得不到答案。最后才发现,原来万恶之源是URL编码!我的数据库中存储的是文件预览的路径,也就是url路径,这个路径中的特殊字符就是被编码过的,所以我将它解码之后再传入,得以成功删除!(说来也巧了,我之前测试的文件都是带有特殊字符的)

2 为什么url要编码

URL(统一资源定位符)编码是一种互联网标准,用于在URL中表示可能不被允许或有特殊意义的字符。URL编码的主要目的包括:

  1. 兼容性:URL中只允许使用一小部分字符,主要是字母、数字和一些特殊符号(如-_.!~*'())。其他字符,如空格、标点符号、特殊符号等,如果直接使用,可能会导致URL解析错误或被误解。
  2. 安全性:URL编码可以防止注入攻击,如SQL注入,通过将特殊字符编码,可以确保这些字符在传输过程中被正确处理,而不是被解释为控制字符。
  3. 数据完整性:在URL中传输数据时,如查询参数,编码可以确保数据在传输过程中不被修改。例如,空格在URL中通常被解释为参数分隔符,如果不进行编码,可能会导致数据被错误地解析。
  4. 国际化:URL编码支持国际化字符,允许在URL中包含非ASCII字符,如中文、日文等,这对于全球化的互联网环境非常重要。

URL编码通常使用百分比编码(Percent-encoding),也称为URL编码。在这种编码方式中,非允许的字符被替换为%后跟两位十六进制数,表示字符的ASCII码。例如,空格被编码为%20

3 哪些需要编码

  • ASCII 控制字符- 通常用于输出控制的不可打印字符。字符范围 00-1F 十六进制(0-31 十进制)和 7F(127 十进制)。下面给出了一个完整的编码表。

  • 非 ASCII 字符- 这些字符超出 128 个字符的 ASCII 字符集。

  • 保留字符- 这些是特殊字符,例如美元符号$、与号&、加号+、普通、正斜杠/ \、冒号:、分号;、等号=、问号?和“@”符号等。所有这些在 URL 中可能有不同的含义,因此需要进行编码。

  • 不安全字符- 这些是空格、引号、小于符号、大于符号、磅字符、百分比字符、左花括号、右花括号、管道、反斜杠、插入符号、波浪号、左方括号、右方括号、重音. 由于各种原因,这些字符可能会在 URL 中被误解。这些字符也应始终进行编码。

4 Java接口进行编码解码

Java中,可以使用java.net.URLEncoderjava.net.URLDecoder类来对URL进行编码和解码。这些类提供了静态方法来处理URL中的字符编码问题。

4.1 URL 编码

URL编码通常用于将URL中的查询字符串参数转换为适合在URL中传输的格式。例如,空格字符在URL中通常被替换为加号(+)或百分号编码(%20)。

示例代码:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class URLEncodingExample {
    public static void main(String[] args) {
        try {
            String url = "http://example.com/search?";
            String query = "这是一个测试";

            // 编码查询参数
            String encodedQuery = URLEncoder.encode(query, "UTF-8");
            String fullUrl = url + "query=" + encodedQuery;

            System.out.println("Encoded URL: " + fullUrl);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

4.2 URL 解码

URL解码用于将编码后的URL转换回原始格式。这通常在从URL中提取参数时使用。

示例代码:

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

public class URLDecodingExample {
    public static void main(String[] args) {
        try {
            String encodedUrl = "http://example.com/search?query=%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B5%8B%E8%AF%95";
            String decodedUrl = URLDecoder.decode(encodedUrl, "UTF-8");

            System.out.println("Decoded URL: " + decodedUrl);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

标签:编码,java,String,字符,url,解码,URL
From: https://www.cnblogs.com/yuqiu2004/p/18426933

相关文章

  • python编码探测-优化版
    importosimportchardetfromtkinterimportfiledialogfromconcurrent.futuresimportThreadPoolExecutor#获取文件的编码defget_all_chardet(filename,max_bytes=1048576):#默认读取1MBtry:withopen(file=filename,mode='rb')asf3:#使用wit......
  • <<编码>> 第 17 章 自动操作(1)--计算设备 示例电路
    info::操作说明首先闭合清零(clear)开关,清除8位触发器(锁存器)中的内容,并把16位计数器的输出置为0000H然后闭合RAM控制面板的控制端开关(接管信号开关)手动输入一组要加的数注:RAM地址0,1,2,3处已预设了1,2,3,4四个值断开接管控制开......
  • 网站数据库错误的原因通常包括配置错误、编码错误、硬件故障、网络问题、数据损坏、权
    网站数据库错误可能由多种因素引起,主要包括以下几点:配置错误:数据库或应用程序的配置不当可能导致连接失败或其他运行时错误。编码错误:程序中的逻辑错误或语法错误也可能导致数据库操作失败。硬件故障:服务器硬件出现问题,如硬盘损坏、内存故障等,会影响数据库的正常运行。网络问......
  • C# base64转pdf + 上传至指定url
    base64topdf1usingSystem;2usingSystem.Collections.Generic;3usingSystem.IO;4usingSystem.Linq;5usingSystem.Text;6usingSystem.Threading.Tasks;78namespaceHS.Common.Helper9{10publicclassPdfHelper11{......
  • 为何我安装完提示这个报错?:Array and string offset access syntax with curly braces
    错误信息 Arrayandstringoffsetaccesssyntaxwithcurlybracesisdeprecated 表明你在使用的PHP版本较高,而你的程序代码中使用了一些在较新版本中已弃用的语法。具体来说,这是PHP7.4及以上版本对数组和字符串偏移量访问语法 {} 的弃用警告。解决方案1.降低PHP......
  • 时间序列无监督异常点检测算法_孤立森林,局部离群因子检测和自编码器
    数据入口:压气机异常检测一维时间序列-Heywhale.com该数据为采样自工业压气机的一维时间序列数据。本文将通过无监督时间序列算法进行时间序列异常检测。针对时间序列数据,常用的无监督异常检测算法包括:孤立森林(IsolationForest)、基于密度的局部离群因子检测(LOF)、自编码器(Au......
  • EyouCms去除URL中的index.php
    为了去掉URL上的 index.php 字符,可以根据不同的服务器环境进行相应的配置。以下是针对Nginx、Apache和IIS服务器的具体配置方法。1.Nginx服务器主目录配置在原有的Nginx重写文件里新增以下代码片段:location/{if(!-e$request_filename){rewr......
  • 编码器与霍尔传感器的工作原理及区别
    霍尔传感器示意图:120度安装: 60度安装:霍尔编码器示意图:工作原理:霍尔传感器:基于霍尔效应,利用霍尔元件检测磁场变化,从而确定位置和运动。当磁场发生变化时,霍尔传感器产生电压信号,用于检测转子位置或线性运动的位置。霍尔传感器通常用于无刷直流电机中,通过检测永磁体的位......
  • Java反序列化调用链分析系列 | URLDNS链
    URLDNS链URLDNS链是java通过反序列化发起dns请求的利用链。一般用于测试反序列化漏洞。该链比较简单,利用链也比较短。其中入口类为HashMap,执行类为URLStreamHandler的hashCode()方法。整个调用链如下:HashMap.readObject()HashMap.putVal()HashMap.hash()URL.hashCode()......
  • Go语言基础-常见编码(Json、Base64)
    编码jsonjson是go标准库里自带的序列化工具,使用了反射,效率比较低easyjson值针对预先定义好的json结构体对输入的json字符串进行纯字符串的截取,并将对应的json字段赋值给结构体easyjson-allxxx.go生成go文件中定义的结构体对应的解析xxx.go所在的package不能是mainfunce......