在 Java 中解码 URI 查询字符串

2023-12-30

我需要解码包含查询字符串的 URI;预期的输入/输出行为如下:

abstract class URIParser
{       
    /** example input: 
      * something?alias=pos&FirstName=Foo+A%26B%3DC&LastName=Bar */
    URIParser(String input) { ... }
    /** should return "something" for the example input */
    public String getPath(); 
    /** should return a map 
      * {alias: "pos", FirstName: "Foo+A&B=C", LastName: "Bar"} */
    public Map<String,String> getQuery();
}

我尝试过使用java.net.URI http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html,但它似乎对查询字符串进行了解码,因此在上面的示例中,我留下了“alias=pos&FirstName=Foo+A&B=C&LastName=Bar”,因此“&”是查询分隔符还是其中的字符存在歧义一个查询组件。

Edit:我刚刚尝试过URI.getRawQuery() http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html#getRawQuery%28%29它不进行编码,所以我可以用一个分割查询字符串&,但那我该怎么办呢? JavaScript 有解码URI组件 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/decodeURIComponent,我在Java中好像找不到对应的方法。

有什么建议么?我不想使用任何新的库。


Use

URLDecoder.decode(proxyRequestParam.replace("+", "%2B"), "UTF-8")
          .replace("%2B", "+")

模拟decodeURIComponent。爪哇的URLDecoder将加号解码为空格,这不是您想要的,因此您需要替换语句。

Warning: the .replace("%2B", "+")在最后will损坏你的数据if正如@xehpuk 指出的那样,原始文件(x-www-form-urlencoded 之前)包含该字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中解码 URI 查询字符串 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • 在 Apple M1 芯片上运行 Apache Flink 1.12 作业

    我刚刚尝试运行Apache Flink 的基本示例 https ci apache org projects flink flink docs release 1 12 try flink local installation html在配
  • 在不使用默认 ID 生成策略时,如何加载受限于集合的 RavenDB 文档

    在 RavenDB 4 v4 0 3 patch 40031 中 我有两种文档类型 Apple and Orange 两者具有相似但又不同的属性 我在运行时遇到代码中的一个错误 有时会提供 Apple 的 ID 但会返回 Orange 可怕
  • 需要命令行使用 adb 启动网络浏览器

    我怎样才能启动浏览器adb shell命令并使其打开某个网页 运行此命令将在 Android 中启动 Web 浏览器 adb shell am start a android intent action VIEW d http www st
  • Linux 中除零异常处理

    我很想了解 Linux 中除零异常处理 当执行除以零运算时 会生成陷阱 即INT0被发送到处理器并最终SIGFPE信号被发送到执行该操作的进程 正如我所看到的 除以零异常被注册在trap init 充当 set trap gate 0 di
  • 最小 tkSimpleDialog 示例中的错误

    我正在尝试一个Python代码示例罗塞塔代码 http rosettacode org wiki User input Graphical Python a 编程学 http en wikipedia org wiki Chrestomat
  • PHP+MySQL 中的 IP 黑名单

    我一直在尝试在 PHP 中实现一种 IP 黑名单 其中我将失败的登录尝试存储到具有以下架构的 MySQL 表中 CREATE TABLE blacklist ip address VARCHAR 35 NOT NULL failures I
  • extjs的安全问题[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我怎样才能让我的客户相信 extjs 可以安全使用 或者 更好的是 我如何确保我的编程在 extjs 3 x 中是安全的 以便数据不会落入坏人之
  • 使用 golang prometheus testutil 进行单元测试

    我们可以断言使用以下方法注册和收集指标testutil CollectAndCount and testutil CollectAndCompare等等 但是有没有办法通过指标名称和标签来收集指标 如果是 CounterVec 以供参考ht
  • RadGrid 在代码隐藏中应用过滤器

    我正在尝试在下拉选择的 RadGrid 过滤器中设置一个值 GridColumn column RadGrid1 MasterTableView GetColumnSafe versionId column CurrentFilterFun
  • 删除节点后树节点不扩展

    我试图在扩展节点 父节点 时替换树节点 更换效果很好 但扩张并没有发生 你有什么解决办法吗 代码如下
  • Eclipse 不会启动,并且我没有更改任何内容

    我至少一个月没有更新任何东西了 我刚刚正常工作 突然菜单全是空白 所以我决定重新启动 eclipse 我单击 关闭 和 确定 保存所有内容 但什么也没发生 所以我再次单击关闭 Eclipse 关闭 我单击了 Eclipse 加载屏幕仅闪烁并
  • 通过 Spring 3 注入 Hibernate Session 的最佳方式

    我不确定使用 Spring3 将 Hibernate 会话实例注入 DAO 类的最佳方法是什么 我没有使用 Spring 的 Hibernate 模板支持 所以这里是我在 DAO 类中的代码 public void setSessionFa
  • 使用正则表达式或其他方式替换字符串中的数字

    我不太擅长正则表达式 我正在努力寻找一个小功能的解决方案 我有一个 ajax 响应 它返回一个类似的字符串 您的工单已成功登录 请点击链接查看详情123432 我所要做的就是替换那个号码123432 with a href blablabl
  • FieldValue.increment 的 Firestore 安全规则

    我在 firestore 有一个计数器可以计算点赞数 我像这样增加它this https fireship io snippets firestore increment tips text Firestore 20Increment do
  • IIS 10 和 HTTP/2 - 需要客户端证书

    目前我正在使用 HTTP 1 1 和 HTTP 2 在 IIS 10 上测试 Web 应用程序 我的测试应用程序有一个端点 api test 它仅返回 true 我有3张证书 根 CA 自签名 由根 CA 签名的服务器证书 由根 CA 签名
  • Jupyter Notebook - 属性错误:“模块”对象没有属性“F_OK”

    每当我输入命令 jupyter notebook 时 它都会给出上面列出的属性错误 我正在通过 Anaconda Prompt 运行它 提示窗口中的内容 base C Users jj891w gt jupyter notebook Tra
  • Glide 图像缓存,带有 id 而不是 url

    我正在使用从 Amazon S3 加载图像的 Android 应用程序 图像 URL 随令牌和过期密钥随机变化 因此我无法缓存图像 Glide 有任何方法可以将 Glide 缓存键设置为任何静态 ID 如图像 id 而不是 url 我附上了
  • 使用 jQuery 迭代每个 div 属性? [复制]

    这个问题在这里已经有答案了 我正在尝试获取每个 div 的 rgb 和索引值 在控制台中我得到了正确的一切 索引和 B 每个 div 的背景颜色 尝试将每个值添加到p在每一个div我只有每个重复的最后一个值div 蓝色的十六进制和数字 5
  • 需要有关 SQL 中复杂的 Join 语句的帮助

    如何连接一个具有稀疏日期数量的表和另一个具有详尽日期数量的表 以便稀疏日期之间的间隙采用前一个稀疏日期的值 说明性示例 PRICE table sparse dates date itemid price 2008 12 04 1 1 20
  • 在 Java 中解码 URI 查询字符串

    我需要解码包含查询字符串的 URI 预期的输入 输出行为如下 abstract class URIParser example input something alias pos FirstName Foo A 26B 3DC LastNa