Here you can find the source of uriDecode(String uri)
Parameter | Description |
---|---|
uri | The uri, in characters specified by RFC 2396 + '#'. |
public static String uriDecode(String uri)
//package com.java2s; /*//from w w w.ja v a 2 s .com * OUtils.java * * Copyright (c) 1995-2012, The University of Sheffield. See the file * COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt * * This file is part of GATE (see http://gate.ac.uk/), and is free * software, licenced under the GNU Library General Public License, * Version 2, June 1991 (in the distribution as file licence.html, * and also available at http://gate.ac.uk/gate/licence.html). * * Ian Roberts 05/05/2010 * * $Id$ * * This class includes code from the com.hp.hpl.jena.util.URIref class of jena * (http://jena.sourceforge.net) which is subject to the following licence: * * (c) Copyright Hewlett-Packard Company 2001 * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ public class Main { /** * Convert a URI reference (URI or URI fragment), in US-ASCII, with escaped * characters taken from UTF-8, to the corresponding Unicode string. * On ill-formed input the results are undefined, specifically if * the unescaped version is not a UTF-8 String, some String will be * returned. * @param uri The uri, in characters specified by RFC 2396 + '#'. * @return The corresponding Unicode String. * @exception IllegalArgumentException If a % hex sequence is ill-formed. */ public static String uriDecode(String uri) { try { byte ascii[] = uri.getBytes("US-ASCII"); byte utf8[] = new byte[ascii.length]; int in = 0; int out = 0; while (in < ascii.length) { // Original JENA class left escaped percent signs (%25) // untouched, we convert them back to plain % if (ascii[in] == (byte) '%') { in++; utf8[out++] = (byte) (hexDecode(ascii[in]) * 16 | hexDecode(ascii[in + 1])); in += 2; } else { utf8[out++] = ascii[in++]; } } return new String(utf8, 0, out, "UTF-8"); } catch (java.io.UnsupportedEncodingException e) { throw new Error("The JVM is required to support UTF-8 and US-ASCII encodings."); } catch (ArrayIndexOutOfBoundsException ee) { throw new IllegalArgumentException("Incomplete Hex escape sequence in " + uri); } } private static final int hexDecode(byte b) { switch (b) { case (byte) 'a': case (byte) 'b': case (byte) 'c': case (byte) 'd': case (byte) 'e': case (byte) 'f': return (b & 255) - 'a' + 10; case (byte) 'A': case (byte) 'B': case (byte) 'C': case (byte) 'D': case (byte) 'E': case (byte) 'F': return b - (byte) 'A' + 10; case (byte) '0': case (byte) '1': case (byte) '2': case (byte) '3': case (byte) '4': case (byte) '5': case (byte) '6': case (byte) '7': case (byte) '8': case (byte) '9': return b - (byte) '0'; default: throw new IllegalArgumentException("Bad Hex escape character: " + (b & 255)); } } }