This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit 5fee30eff297520b3cf94782f3830cb8d84ed21e Author: Andy Seaborne <[email protected]> AuthorDate: Mon Sep 2 18:42:16 2024 +0100 Query and fragment endocde-decode --- .../src/main/java/org/apache/jena/atlas/lib/IRILib.java | 12 +++++++++++- .../src/test/java/org/apache/jena/atlas/lib/TestIRILib.java | 11 ++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java index bf886aa943..021d6d996f 100644 --- a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java +++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java @@ -286,9 +286,19 @@ public class IRILib */ public static String encodeUriQueryFrag(String string) { String encStr = StrUtils.encodeHex(string,'%', charsQueryFrag) ; - return encStr ; + // Space is special. + String encStr1 = encStr.replace("%20", "+"); + return encStr1 ; + } + + public static String decodeUriQueryFrag(String string) { + // Space is special. Reverse order compared to encodeUriQueryFrag + String decStr0 = string.replace("+", " "); + String decStr = StrUtils.decodeHex(decStr0,'%') ; + return decStr ; } + /** Encode using the rules for a file: URL. * Does not encode non-ASCII characters */ diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java index dc260cd9c6..6cef24f4da 100644 --- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java +++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java @@ -41,10 +41,10 @@ public class TestIRILib { assertEquals(testString, decoded); } - private void encodeDecodeQueryFrag(String testString, String expected) { + private void encodeDecodeQueryFrag(String testString, String expectedEncoded) { String encoded = IRILib.encodeUriQueryFrag(testString); - assertEquals(expected, encoded); - String decoded = IRILib.decodeHex(encoded); + assertEquals(expectedEncoded, encoded); + String decoded = IRILib.decodeUriQueryFrag(encoded); assertEquals(testString, decoded); } @@ -61,5 +61,10 @@ public class TestIRILib { public void codec_queryFrag_02() { encodeDecodeQueryFrag("http://example/graph?name=value#zzzz", "http://example/graph?name%3Dvalue%23zzzz"); } + + @Test + public void codec_queryFrag_03() { + encodeDecodeQueryFrag("ab cd", "ab+cd"); + } }
