rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java
changeset 802 b975b19621c6
parent 800 3661b82478e0
child 916 c3c30f25c723
     1.1 --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java	Fri Mar 01 14:10:57 2013 +0100
     1.2 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java	Fri Mar 01 17:21:33 2013 +0100
     1.3 @@ -19,6 +19,7 @@
     1.4  
     1.5  import java.io.IOException;
     1.6  import java.io.InputStream;
     1.7 +import java.io.UnsupportedEncodingException;
     1.8  import java.lang.reflect.InvocationTargetException;
     1.9  import java.lang.reflect.Method;
    1.10  import java.lang.reflect.Modifier;
    1.11 @@ -131,12 +132,15 @@
    1.12          }
    1.13      }
    1.14      
    1.15 -    private static String encodeURL(String r) {
    1.16 +    private static String encodeURL(String r) throws UnsupportedEncodingException {
    1.17 +        final String SPECIAL = "%$&+,/:;=?@";
    1.18          StringBuilder sb = new StringBuilder();
    1.19 -        for (int i = 0; i < r.length(); i++) {
    1.20 -            int ch = r.charAt(i);
    1.21 -            if (ch < 32 || ch == '%' || ch == '+') {
    1.22 -                sb.append("%").append(("0" + Integer.toHexString(ch)).substring(0, 2));
    1.23 +        byte[] utf8 = r.getBytes("UTF-8");
    1.24 +        for (int i = 0; i < utf8.length; i++) {
    1.25 +            int ch = utf8[i] & 0xff;
    1.26 +            if (ch < 32 || ch > 127 || SPECIAL.indexOf(ch) >= 0) {
    1.27 +                final String numbers = "0" + Integer.toHexString(ch);
    1.28 +                sb.append("%").append(numbers.substring(numbers.length() - 2));
    1.29              } else {
    1.30                  if (ch == 32) {
    1.31                      sb.append("+");