Java URI encoder

Recently I discovered that the URL encoder provided in Java is meant for forms and headers, and not actual URLs.   After looking at the URI spec here, I created a quick and compact URI encoder for java:

/**
 * simple uri encoder, made from the spec at http://www.ietf.org/rfc/rfc2396.txt
 * Feel free to copy this. I'm not responsible for this code in any way, ever.
 * Thanks to Marco and Thomas
 * @author Daniel Murphy
 */
public class URIEncoder {
  private static final String mark = "-_.!~*'()\"";
  private static final char[] hex = "0123456789ABCDEF".toCharArray();

  public static String encodeURI(String argString) {
    StringBuilder uri = new StringBuilder();

    char[] chars = argString.toCharArray();
    for (int i = 0; i < chars.length; i++) {
      char c = chars[i];
      if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') ||
          (c >= 'A' && c <= 'Z') || mark.indexOf(c) != -1) {
        uri.append(c);
      } else {
        appendEscaped(uri, c);
      }
    }
    return uri.toString();
  }

  private static void appendEscaped(StringBuilder uri, char c) {
    if (c <= (char) 0xF) {
      uri.append("%");
      uri.append('0');
      uri.append(hex[ c]);
    } else if (c <= (char) 0xFF) {
      uri.append("%");
      uri.append(hex[ c >> 8]);
      uri.append(hex[ c & 0xF]);
    } else {
      // unicode
      uri.append('\\');
      uri.append('u');
      uri.append(hex[ c >> 24]);
      uri.append(hex[(c >> 16) & 0xF]);
      uri.append(hex[(c >> 8) & 0xF]);
      uri.append(hex[ c & 0xF]);
    }
  }
}

Edit: Updated with char-to-hex speed improvements, fixed < 15 bug, and now encodes unicode chars if > 0xFF