Added URLDecoder class (Unicode not supported)

This commit is contained in:
Ziver Koc 2015-12-11 14:37:25 +01:00
parent 29e684e117
commit bf235694eb
4 changed files with 75 additions and 1 deletions

BIN
Zutil.jar

Binary file not shown.

View file

@ -24,6 +24,8 @@
package zutil.net.http; package zutil.net.http;
import zutil.parser.URLDecoder;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
@ -49,7 +51,7 @@ public class HttpHeaderParser {
private HashMap<String, String> cookies; private HashMap<String, String> cookies;
/** /**
* Parses the HTTP header information from the stream * Parses the HTTP header information from a stream
* *
* @param in is the stream * @param in is the stream
* @throws IOException * @throws IOException
@ -147,6 +149,7 @@ public class HttpHeaderParser {
*/ */
public static void parseURLParameters(String attributes, HashMap<String, String> map){ public static void parseURLParameters(String attributes, HashMap<String, String> map){
String[] tmp; String[] tmp;
attributes = URLDecoder.decode(attributes);
// get the variables // get the variables
String[] data = andPattern.split( attributes ); String[] data = andPattern.split( attributes );
for(String element : data){ for(String element : data){

View file

@ -0,0 +1,36 @@
package zutil.parser;
/**
* This utility class will decode Strings encoded with % sign's to a normal String
*
* Created by Ziver on 2015-12-11.
*/
public class URLDecoder {
public static String decode(String url){
if(url == null)
return null;
StringBuilder out = new StringBuilder();
for (int i=0; i<url.length(); ++i) {
char c = url.charAt(i);
switch (c){
case '+':
out.append(' ');
break;
case '%':
if (i+2 < url.length()) {
char ascii = (char)Integer.parseInt("" + url.charAt(i + 1) + url.charAt(i + 2), 16);
out.append(ascii);
i += 2;
}
else
out.append(c);
break;
default:
out.append(c);
break;
}
}
return out.toString();
}
}

View file

@ -0,0 +1,35 @@
package zutil.test;
import org.junit.Test;
import zutil.parser.URLDecoder;
import static org.junit.Assert.assertEquals;
/**
* Created by ezivkoc on 2015-12-11.
*/
public class URLDecoderTest {
@Test
public void simpleTest(){
assertEquals(null, URLDecoder.decode(null));
assertEquals("", URLDecoder.decode(""));
assertEquals("space space", URLDecoder.decode("space space"));
assertEquals("space space", URLDecoder.decode("space+space"));
assertEquals("space space", URLDecoder.decode("space%20space"));
}
@Test
public void percentTest(){
assertEquals("test+", URLDecoder.decode("test%2B"));
assertEquals("test%2", URLDecoder.decode("test%2"));
assertEquals("test+test", URLDecoder.decode("test%2Btest"));
assertEquals("test+test", URLDecoder.decode("test%2btest"));
}
@Test
public void percentMultibyteTest(){
assertEquals("Ängen", URLDecoder.decode("%C3%84ngen"));
}
}