Provides a method to encode any string into a URL-safe form : URLDecoder « Network « Java Tutorial

Java Tutorial
1. Language
2. Data Type
3. Operators
4. Statement Control
5. Class Definition
6. Development
7. Reflection
8. Regular Expressions
9. Collections
10. Thread
11. File
12. Generics
13. I18N
14. Swing
15. Swing Event
16. 2D Graphics
17. SWT
18. SWT 2D Graphics
19. Network
20. Database
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web Services SOA
27. EJB3
28. Spring
29. PDF
30. Email
31. J2ME
32. J2EE Application
33. XML
34. Design Pattern
35. Log
36. Security
37. Apache Common
38. Ant
39. JUnit
Java
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Tutorial » Network » URLDecoder 
19. 4. 19. Provides a method to encode any string into a URL-safe form
/**
 
 * JFreeReport : a free Java reporting library
 
 *
 * Project Info:  http://reporting.pentaho.org/
 *
 * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
 * either version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
 * in the United States and other countries.]
 *
 * ------------
 * UTFEncodingUtil.java
 * ------------
 * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
 */

import java.io.UnsupportedEncodingException;


/**
 * Provides a method to encode any string into a URL-safe form. Non-ASCII characters are first encoded as sequences of
 * two or three bytes, using the UTF-8 algorithm, before being encoded as %HH escapes.
 * <p/>
 * Code is the public example given at http://www.w3.org/International/O-URL-code.html
 *
 @author Bert Bos
 */
public class UTFEncodingUtil
{
  /**
   * Private Constructor prevents Object Creation.
   */
  private UTFEncodingUtil()
  {
  }

  /**
   * A lookup table.
   */
  private static final String[] hex = {
      "%00""%01""%02""%03""%04""%05""%06""%07",
      "%08""%09""%0A""%0B""%0C""%0D""%0E""%0F",
      "%10""%11""%12""%13""%14""%15""%16""%17",
      "%18""%19""%1A""%1B""%1C""%1D""%1E""%1F",
      "%20""%21""%22""%23""%24""%25""%26""%27",
      "%28""%29""%2A""%2B""%2C""%2D""%2E""%2F",
      "%30""%31""%32""%33""%34""%35""%36""%37",
      "%38""%39""%3A""%3B""%3C""%3D""%3E""%3F",
      "%40""%41""%42""%43""%44""%45""%46""%47",
      "%48""%49""%4A""%4B""%4C""%4D""%4E""%4F",
      "%50""%51""%52""%53""%54""%55""%56""%57",
      "%58""%59""%5A""%5B""%5C""%5D""%5E""%5F",
      "%60""%61""%62""%63""%64""%65""%66""%67",
      "%68""%69""%6A""%6B""%6C""%6D""%6E""%6F",
      "%70""%71""%72""%73""%74""%75""%76""%77",
      "%78""%79""%7A""%7B""%7C""%7D""%7E""%7F",
      "%80""%81""%82""%83""%84""%85""%86""%87",
      "%88""%89""%8A""%8B""%8C""%8D""%8E""%8F",
      "%90""%91""%92""%93""%94""%95""%96""%97",
      "%98""%99""%9A""%9B""%9C""%9D""%9E""%9F",
      "%A0""%A1""%A2""%A3""%A4""%A5""%A6""%A7",
      "%A8""%A9""%AA""%AB""%AC""%AD""%AE""%AF",
      "%B0""%B1""%B2""%B3""%B4""%B5""%B6""%B7",
      "%B8""%B9""%BA""%BB""%BC""%BD""%BE""%BF",
      "%C0""%C1""%C2""%C3""%C4""%C5""%C6""%C7",
      "%C8""%C9""%CA""%CB""%CC""%CD""%CE""%CF",
      "%D0""%D1""%D2""%D3""%D4""%D5""%D6""%D7",
      "%D8""%D9""%DA""%DB""%DC""%DD""%DE""%DF",
      "%E0""%E1""%E2""%E3""%E4""%E5""%E6""%E7",
      "%E8""%E9""%EA""%EB""%EC""%ED""%EE""%EF",
      "%F0""%F1""%F2""%F3""%F4""%F5""%F6""%F7",
      "%F8""%F9""%FA""%FB""%FC""%FD""%FE""%FF"
  };

  /**
   * Encode a string according to RFC 1738.
   * <p/>
   * <quote> "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed],
   * and reserved characters used for their reserved purposes may be used unencoded within a URL."</quote>
   * <p/>
   * <ul> <li><p>The ASCII characters 'a' through 'z', 'A' through 'Z', and '0' through '9' remain the same.
   * <p/>
   * <li><p>The unreserved characters - _ . ! ~ * ' ( ) remain the same.
   * <p/>
   * <li><p>All other ASCII characters are converted into the 3-character string "%xy", where xy is the two-digit
   * hexadecimal representation of the character code
   * <p/>
   * <li><p>All non-ASCII characters are encoded in two steps: first to a sequence of 2 or 3 bytes, using the UTF-8
   * algorithm; secondly each of these bytes is encoded as "%xx". </ul>
   *
   @param s The string to be encoded
   @return The encoded string
   */
  public static String encodeUTF8(final String s)
  {
    final StringBuffer sbuf = new StringBuffer();
    final char[] sChars = s.toCharArray();
    final int len = sChars.length;
    for (int i = 0; i < len; i++)
    {
      final int ch = sChars[i];
      if ('A' <= ch && ch <= 'Z')
      {    // 'A'..'Z'
        sbuf.append((charch);
      }
      else if ('a' <= ch && ch <= 'z')
      {  // 'a'..'z'
        sbuf.append((charch);
      }
      else if ('0' <= ch && ch <= '9')
      {  // '0'..'9'
        sbuf.append((charch);
      }
      else if (ch == '-' || ch == '_'    // unreserved
          || ch == '.' || ch == '!'
          || ch == '~' || ch == '*'
          || ch == '\'' || ch == '('
          || ch == ')')
      {
        sbuf.append((charch);
      }
      else if (ch <= 0x007f)
      {    // other ASCII
        sbuf.append(hex[ch]);
      }
      else if (ch <= 0x07FF)
      {    // non-ASCII <= 0x7FF
        sbuf.append(hex[0xc0 (ch >> 6)]);
        sbuf.append(hex[0x80 (ch & 0x3F)]);
      }
      else
      {          // 0x7FF < ch <= 0xFFFF
        sbuf.append(hex[0xe0 (ch >> 12)]);
        sbuf.append(hex[0x80 ((ch >> 60x3F)]);
        sbuf.append(hex[0x80 (ch & 0x3F)]);
      }
    }
    return sbuf.toString();
  }

  /**
   * Encodes a byte-array. The array is expected to contain ASCII characters, or the result may not be valid.
   *
   @param s the byte array
   @return the array as encoded string.
   */
  private static String encodeBytes(final byte[] s)
  {
    final StringBuffer sbuf = new StringBuffer();
    final int len = s.length;
    for (int i = 0; i < len; i++)
    {
      final int ch = (s[i0xff);
      if ('A' <= ch && ch <= 'Z')
      {    // 'A'..'Z'
        sbuf.append((charch);
      }
      else if ('a' <= ch && ch <= 'z')
      {  // 'a'..'z'
        sbuf.append((charch);
      }
      else if ('0' <= ch && ch <= '9')
      {  // '0'..'9'
        sbuf.append((charch);
      }
      else if (ch == '-' || ch == '_'    // unreserved
          || ch == '.' || ch == '!'
          || ch == '~' || ch == '*'
          || ch == '\'' || ch == '('
          || ch == ')')
      {
        sbuf.append((charch);
      }
      else
      {    // other ASCII
        sbuf.append(hex[ch]);
      }
    }
    return sbuf.toString();
  }

  /**
   * Encodes thh given string using the provided encoding. The encoding must be a valid Java-encoding.
   *
   @param s        the string that should be encoded.
   @param encoding the encoding to tranform the string into bytes.
   @return the encoded string.
   @throws UnsupportedEncodingException if the specified encoding is not recognized.
   */
  public static String encode(final String s, final String encoding)
      throws UnsupportedEncodingException
  {
    if ("utf-8".equalsIgnoreCase(encoding))
    {
      return encodeUTF8(s);
    }

    return encodeBytes(s.getBytes(encoding));
  }



  /**
   * Decodes the given string using the provided encoding. The encoding must be a valid
   * Java-encoding.
   *
   @param s        the string that should be encoded.
   @param encoding the encoding to tranform the bytes into a string.
   @return the encoded string.
   @throws UnsupportedEncodingException if the specified encoding is not recognized.
   */
  public static String decode(final String s, final String encoding)
      throws UnsupportedEncodingException
  {
    if ("utf-8".equalsIgnoreCase(encoding))
    {
      return decodeUTF(s);
    }
    // the resulting string will never be greater than the encoded string
    final byte[] result = new byte[s.length()];
    final char[] chars = s.toCharArray();
    int position = 0;

    for (int i = 0; i < chars.length; i++)
    {
      final char ch = chars[i];
      final int b;
      switch (ch)
      {
        case'%':
          final char lch = s.charAt(++i);
          final int hb = (Character.isDigit(lch)
              ? lch - '0'
              10 + Character.toLowerCase(lch'a'0xF;
          final char hch = s.charAt(++i);
          final int lb = (Character.isDigit(hch)
              ? hch - '0'
              10 + Character.toLowerCase(hch'a'0xF;
          b = (hb << 4| lb;
          break;
        case'+':
          b = ' ';
          break;
        default:
          b = ch;
      }
      result[position(byteb;
      position += 1;
    }
    return new String(result, 0, position, encoding);
  }

  /**
   * Decodes the given string using the encoding UTF-8.
   *
   @param s        the string that should be encoded.
   @return the encoded string.
   */
  public static String decodeUTF(final String s)
  {
    final StringBuffer sbuf = new StringBuffer();
    final char[] chars = s.toCharArray();
    final int l = chars.length;
    int sumb = 0;
    for (int i = 0, more = -1; i < l; i++)
    {
      /* Get next byte b from URL segment s */
      final int ch = chars[i];
      final int b;
      switch (ch)
      {
        case'%':
          final char lch = s.charAt(++i);
          final int hb = (Character.isDigit(lch)
              ? lch - '0'
              10 + Character.toLowerCase(lch'a'0xF;
          final char hch = s.charAt(++i);
          final int lb = (Character.isDigit(hch)
              ? hch - '0'
              10 + Character.toLowerCase(hch'a'0xF;
          b = (hb << 4| lb;
          break;
        case'+':
          b = ' ';
          break;
        default:
          b = ch;
      }
      /* Decode byte b as UTF-8, sumb collects incomplete chars */
      if ((b & 0xc0== 0x80)
      {      // 10xxxxxx (continuation byte)
        sumb = (sumb << 6(b & 0x3f);  // Add 6 bits to sumb
        if (--more == 0)
        {
          sbuf.append((charsumb)// Add char to sbuf
        }
      }
      else if ((b & 0x80== 0x00)
      {    // 0xxxxxxx (yields 7 bits)
        sbuf.append((charb);      // Store in sbuf
      }
      else if ((b & 0xe0== 0xc0)
      {    // 110xxxxx (yields 5 bits)
        sumb = b & 0x1f;
        more = 1;        // Expect 1 more byte
      }
      else if ((b & 0xf0== 0xe0)
      {    // 1110xxxx (yields 4 bits)
        sumb = b & 0x0f;
        more = 2;        // Expect 2 more bytes
      }
      else if ((b & 0xf8== 0xf0)
      {    // 11110xxx (yields 3 bits)
        sumb = b & 0x07;
        more = 3;        // Expect 3 more bytes
      }
      else if ((b & 0xfc== 0xf8)
      {    // 111110xx (yields 2 bits)
        sumb = b & 0x03;
        more = 4;        // Expect 4 more bytes
      }
      else /*if ((b & 0xfe) == 0xfc)*/
      {  // 1111110x (yields 1 bit)
        sumb = b & 0x01;
        more = 5;        // Expect 5 more bytes
      }
      /* We don't test if the UTF-8 encoding is well-formed */
    }
    return sbuf.toString();
  }
}
19. 4. URLDecoder
19. 4. 1. URL decoder
19. 4. 2. URLDecoder 2
19. 4. 3. URLEncoder: space
19. 4. 4. URLEncoder: asterisks
19. 4. 5. URLEncoder:
19. 4. 6. URLEncoder: plus sign
19. 4. 7. URLEncoder: slashes
19. 4. 8. URLEncoder: quotations
19. 4. 9. URLEncoder: colons(:)
19. 4. 10. URLEncoder: tildes(~)
19. 4. 11. URLEncoder: parentheses()
19. 4. 12. URLEncoder: dot
19. 4. 13. URLEncoder: equal sign
19. 4. 14. URLEncoder: ampersands
19. 4. 15. Converting x-www-form-urlencoded Data
19. 4. 16. Parse a x-www-form-urlencoded string
19. 4. 17. Encode a path as required by the URL specification
19. 4. 18. Decoding and encoding URLs
19. 4. 19. Provides a method to encode any string into a URL-safe form
19. 4. 20. Converting text to be used within a URL
19. 4. 21. URL encoding
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.