1 /* 2 * Copyright (c) 2012, Dienst Landelijk Gebied - Ministerie van Economische Zaken 3 * 4 * Gepubliceerd onder de BSD 2-clause licentie, 5 * zie https://github.com/MinELenI/CBSviewer/blob/master/LICENSE.md voor de volledige licentie. 6 */ 7 package nl.mineleni.cbsviewer.util; 8 9 import java.io.UnsupportedEncodingException; 10 import java.net.URLDecoder; 11 import java.net.URLEncoder; 12 13 /** 14 * Utility class for JavaScript compatible UTF-8 encoding and decoding. 15 * 16 * @see "http://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-output" 17 * @author John Topley 18 */ 19 public final class EncodingUtil { 20 /** 21 * Private constructor to prevent this class from being instantiated. 22 */ 23 private EncodingUtil() { 24 } 25 26 /** 27 * Decodes the passed UTF-8 String using an algorithm that's compatible with 28 * JavaScript's <code>decodeURIComponent</code> function. Returns 29 * <code>null</code> if the String is <code>null</code>. 30 * 31 * @param s 32 * The UTF-8 encoded String to be decoded 33 * @return the decoded String 34 */ 35 public static String decodeURIComponent(final String s) { 36 if (s == null) { 37 return null; 38 } 39 String result = null; 40 try { 41 result = URLDecoder.decode(s, "UTF-8"); 42 } catch (final UnsupportedEncodingException e) { 43 // This exception should never occur. 44 result = s; 45 } 46 return result; 47 } 48 49 /** 50 * Encodes the passed String as UTF-8 using an algorithm that's compatible 51 * with JavaScript's <code>encodeURIComponent</code> function. Returns 52 * <code>null</code> if the String is <code>null</code>. 53 * 54 * @param s 55 * The String to be encoded 56 * @return the encoded String 57 */ 58 public static String encodeURIComponent(final String s) { 59 String result = null; 60 try { 61 result = URLEncoder.encode(s, "UTF-8").replaceAll("\\+", "%20") 62 .replaceAll("\\%21", "!").replaceAll("\\%27", "'") 63 .replaceAll("\\%28", "(").replaceAll("\\%29", ")") 64 .replaceAll("\\%7E", "~"); 65 } catch (final UnsupportedEncodingException e) { 66 // This exception should never occur. 67 result = s; 68 } 69 return result; 70 } 71 72 }