当前位置: 首页 > 面试题库 >

Java URL编码:URLEncoder与URI

阴培
2023-03-14
问题内容

在W3 Schools
URL编码网页
上看到,它说@应该被编码为%40,并且space应该被编码为%20

我已经尝试了URLEncoderURI,但是上述方法都没有正确执行:

import java.net.URI;
import java.net.URLEncoder;

public class Test {
    public static void main(String[] args) throws Exception {

        // Prints me%40home.com (CORRECT)
        System.out.println(URLEncoder.encode("me@home.com", "UTF-8"));

        // Prints Email+Address (WRONG: Should be Email%20Address)
        System.out.println(URLEncoder.encode("Email Address", "UTF-8"));

        // http://www.home.com/test?Email%20Address=me@home.com
        // (WRONG: it has not encoded the @ in the email address)
        URI uri = new URI("http", "www.home.com", "/test", "Email Address=me@home.com", null);
        System.out.println(uri.toString());
    }
}

由于某些原因,URLEncoder电子邮件地址正确但不能空格,并且URI货币而不是电子邮件地址。

我应该如何编码这两个参数,以与w3schools所说的正确(或w3schools错误)相一致?


问题答案:

尽管我认为@fge的答案是正确的,但是由于我使用的是基于W3Schools文章中概述的编码的第三方Web服务,所以我遵循Java的答案,而Java的答案与产生相同输出的JavaScript的encodeURIComponent等效?

public static String encodeURIComponent(String s) {
    String result;

    try {
        result = URLEncoder.encode(s, "UTF-8")
                .replaceAll("\\+", "%20")
                .replaceAll("\\%21", "!")
                .replaceAll("\\%27", "'")
                .replaceAll("\\%28", "(")
                .replaceAll("\\%29", ")")
                .replaceAll("\\%7E", "~");
    } catch (UnsupportedEncodingException e) {
        result = s;
    }

    return result;
}


 类似资料:
  • 问题内容: 我正在工作的项目是使用Jackson JSON 序列化程序将一堆Java对象转换为String,以便将它们发送到REST服务。 其中一些对象包含敏感数据,因此我编写了自定义序列化程序以将这些对象序列化为JSON字符串,然后对其进行gzip,然后使用; 对其进行加密。 这会将字符串转换为字节数组,因此我在编解码器中使用Base64编码器将字节数组转换为字符串。REST接口背后的自定义反序

  • 源编码与目标编码的不一致. 而中文window系统默认编码GBK,害惨了多少程序员. 要尽量减少出现乱码,我个人认为要做到5码合一, IDE(Eclipse/idea),页面(jsp/其他模板引擎),应用服务器(tomcat等), 源码(Java源码及周边文件),数据库编码. 将Eclipse设置为UTF-8 打开Eclipse安装目录下的eclipse.ini,在最末尾新增一行 -Dfile.

  • 问题内容: 我想编码一个可能是图像或任何pdf的文件并将其发送到服务器。我必须遵循哪种类型的编码和解码。(服务器和客户端都在我们公司内。我们可以在两个地方都写逻辑)。Java默认情况下支持 UTF-8编码 。并使用 Base-64 编码,我必须导入外部jar。对于简单的文本,两种方法都可以正常工作。我正在使用tcp套接字编程。 使用UTF-8编码 使用Base-64(使用Apache的common

  • 我正在尝试使用Xugler(我相信它在引擎盖下使用)来执行以下操作: 接收原始MPJPEG视频比特流(来自小型TTL串行摄像头),并将其编码/转码为h.264;和 接收原始音频比特RAM(来自麦克风)并将其编码到AAC;然后 将两个(音频和视频)位存储在一起,并将其多路复用到一个MPEG-TS容器中 我已经看过了他们的一些优秀教程,到目前为止,我得到的是: 首先,我认为我离这里很近,但它仍然不正确

  • 初识Unicode 编码 # codecs_to_hex.py import binascii def to_hex(t, nbytes): """Format text t as a sequence of nbyte long values separated by spaces. """ chars_per_item = nbytes * 2 he

  • 本文向大家介绍php base64 编码与解码实例代码,包括了php base64 编码与解码实例代码的使用技巧和注意事项,需要的朋友参考一下 php base64 编码与解码详解 1.自定义规则方式编码和解码 实例 2.利用系统函数完成base64位的编码和解码 实例代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!