Newer
Older
alarm / src / com / casic / core / util / EncodeUtils.java
zhout on 2 Mar 2022 3 KB first commit
 package com.casic.core.util;

 import org.apache.commons.codec.DecoderException;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Hex;

 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;

 public class EncodeUtils
 {
   private static final String DEFAULT_URL_ENCODING = "UTF-8";
   private static final int UNPRINTABLE_CHAR_CODE = 16;
   private static final int ANSI_CHAR_CODE = 256;
   private static final int HEX = 16;
   private static final int UNICODE_LENGTH = "\\u0000".length();
 
   private static final int ANSI_LENGTH = "%FF".length();
 
   public static String hexEncode(byte[] input)
   {
     return Hex.encodeHexString(input);
   }
 
   public static byte[] hexDecode(String input)
   {
     try
     {
       return Hex.decodeHex(input.toCharArray());
     } catch (DecoderException e) {
       throw new IllegalStateException("Hex Decoder exception", e);
     }
   }
 
   public static String base64Encode(byte[] input)
   {
     try
     {
       return new String(Base64.encodeBase64(input), "UTF-8");
     } catch (UnsupportedEncodingException e) {
       throw new IllegalArgumentException("cannot encode base64", e);
     }
   }
 
   public static String base64UrlSafeEncode(byte[] input)
   {
     return Base64.encodeBase64URLSafeString(input);
   }
 
   public static byte[] base64Decode(String input)
   {
     return Base64.decodeBase64(input);
   }
 
   public static String urlEncode(String input)
   {
     try
     {
       return URLEncoder.encode(input, "UTF-8");
     } catch (UnsupportedEncodingException e) {
       throw new IllegalArgumentException("Unsupported Encoding Exception", e);
     }
   }
 
   public static String urlDecode(String input)
   {
     try
     {
       return URLDecoder.decode(input, "UTF-8");
     } catch (UnsupportedEncodingException e) {
       throw new IllegalArgumentException("Unsupported Encoding Exception", e);
     }
   }
 
   public static String htmlEscape(String html)
   {
     return StringUtils.escapeHtml(html);
   }
 
   public static String htmlUnescape(String htmlEscaped)
   {
     return StringUtils.unescapeHtml(htmlEscaped);
   }
 
   public static String xmlEscape(String xml)
   {
     return StringUtils.escapeXml(xml);
   }
 
   public static String xmlUnescape(String xmlEscaped)
   {
     return StringUtils.unescapeXml(xmlEscaped);
   }
 
   public static String escapeJS(String src)
   {
     StringBuffer tmp = new StringBuffer();
     tmp.ensureCapacity(src.length() * UNICODE_LENGTH);
 
     for (int i = 0; i < src.length(); i++) {
       char j = src.charAt(i);
 
       if ((Character.isDigit(j)) || (Character.isLowerCase(j)) || (Character.isUpperCase(j)))
       {
         tmp.append(j);
       } else if (j < 'Ā') {
         tmp.append("%");
 
         if (j < '\020') {
           tmp.append("0");
         }
 
         tmp.append(Integer.toString(j, 16));
       } else {
         tmp.append("%u");
         tmp.append(Integer.toString(j, 16));
       }
     }
 
     return tmp.toString();
   }
 
   public static String unescapeJS(String src)
   {
     StringBuffer tmp = new StringBuffer();
     tmp.ensureCapacity(src.length());
 
     int lastPos = 0;
     int pos = 0;
 
     while (lastPos < src.length()) {
       pos = src.indexOf('%', lastPos);
 
       if (pos == lastPos) {
         if (src.charAt(pos + 1) == 'u') {
           char ch = (char)Integer.parseInt(src.substring(pos + 2, pos + UNICODE_LENGTH), 16);
 
           tmp.append(ch);
           lastPos = pos + UNICODE_LENGTH;
         } else {
           char ch = (char)Integer.parseInt(src.substring(pos + 1, pos + ANSI_LENGTH), 16);
 
           tmp.append(ch);
           lastPos = pos + ANSI_LENGTH;
         }
       }
       else if (pos == -1) {
         tmp.append(src.substring(lastPos));
         lastPos = src.length();
       } else {
         tmp.append(src.substring(lastPos, pos));
         lastPos = pos;
       }
 
     }
 
     return tmp.toString();
   }
 }