【java】对URL中的中文和符号进行UrlEncode转码

需求

我们有一个需求,是和钉钉审批打通的,然后有需要放附件的地方,没有用钉钉云盘附件的那种形式,而是直接用了单行文本框,放一个链接的形式。
然后我们文件上传用的是ali的oss,上传完成以后会得到一个类似 ossHost/文件夹名/文件名的链接,此时就会有一个问题产生,如果我的链接中带中文,当我把这个链接放到钉钉的文本框中提交以后,从中文部分开始,不会被识别为链接的一部分,这可就阿西吧了。

当时发现这个问题的时候,我基本是懵的,脑袋里完全没有解决方案,然后组长说,你试试urlencode一下再放到文本框里。

于是就得到了解决方案,下面放下代码

代码

    public static void main(String[] args) throws UnsupportedEncodingException {
        String url="https://test.oss-cn-beijing.aliyuncs.com/product/4567455【合规】某个使用条例.pdf";
        Matcher matcher =Pattern.compile("[\\u4e00-\\u9fa5]|[\\u3002\\uff1b\\uff0c\\uff1a\\u201c\\u201d\\uff08\\uff09\\u3001\\uff1f\\u300a\\u300b\\u3010\\u3011]").matcher(url);
        while (matcher.find()) {
            String tmp = matcher.group();
            try {
                url = url.replaceAll(tmp, java.net.URLEncoder.encode(tmp, "utf-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

        System.out.println(url);
    }

解释

[\\u4e00-\\u9fa5] 代表匹配所有中文。
[\\u3002\\uff1b\\uff0c\\uff1a\\u201c\\u201d\\uff08\\uff09\\u3001\\uff1f\\u300a\\u300b\\u3010\\u3011] 这块是我需要匹配的符号这些,如果有需要定制的,可以自己加上。
比如用unicode 转换一下就知道自己该匹配谁了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java,可以使用`java.net.URLEncoder`类进行URL编码。对于URL的某个参数进行编码,可以先将参数值进行编码,然后再将参数名和编码后的参数值拼接成完整的参数字符串。示例代码如下: ```java import java.net.URLEncoder; String paramName = "name"; String paramValue = "张三"; String encodedValue = URLEncoder.encode(paramValue, "UTF-8"); String paramStr = paramName + "=" + encodedValue; String url = "http://example.com?" + paramStr; ``` 在上面的代码,我们先定义了参数名`paramName`和参数值`paramValue`,然后使用`URLEncoder`类的`encode`方法对参数值进行编码,编码方式为`UTF-8`。接着,将参数名和编码后的参数值拼接成完整的参数字符串`paramStr`,再将参数字符串和URL拼接成完整的URL地址。 需要注意的是,`URLEncoder`类将空格编码为`+`符号而不是`%20`,如果需要将空格编码为`%20`,可以使用`String.replace`方法进行替换。例如: ```java String encodedValue = URLEncoder.encode(paramValue, "UTF-8").replace("+", "%20"); ``` 此外,如果需要对整个URL进行编码,可以使用`java.net.URI`类。例如: ```java import java.net.URI; import java.net.URISyntaxException; String url = "http://example.com?key=value with space"; URI uri = new URI(url); String encodedUrl = uri.toASCIIString(); ``` 在上面的代码,我们先定义了需要编码的URL地址`url`,其包含了一个带空格的参数值。然后使用`URI`类将URL解析为URI对象,并调用`toASCIIString`方法将URI对象转换为ASCII编码的字符串。这样,空格就会被编码为`%20`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值