Last active
August 29, 2015 14:06
-
-
Save greycode/5e50a3561d05ccea26bf to your computer and use it in GitHub Desktop.
从SS4 摘抄来的 Encodes工具类
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package xxx; | |
import org.xxx.utils.Encodes; | |
public class EncodeDemo { | |
public static void main(String[] args) throws Exception { | |
System.out.println(Encodes.encodeHex("你好,世界+あい/うえお@xxx.com".getBytes())); | |
System.out.println(Encodes.encodeBase62("你好,世界+あい/うえお@xxx.com".getBytes())); | |
System.out.println(Encodes.encodeBase64("你好,世界+あい/うえお@xxx.com".getBytes())); | |
System.out.println(Encodes.encodeUrlSafeBase64("你好,世界+あい/うえお@xxx.com".getBytes())); | |
System.out.println(Encodes.escapeHtml("<div class='hello'>div content</div>")); | |
System.out.println(Encodes.escapeXml("<lily & lucy >")); | |
System.out.println(Encodes.urlEncode("http://localhost:8080/app")); | |
//System.out.println(Encodes.encodeHex("你好,世界".getBytes("GBK"))); | |
// e4bda0e5a5bdefbc8ce4b896e7958c2be38182e381842fe38186e38188e3818a407878782e636f6d | |
// g3ahf3r2GgyQjPGhf56f58lf5Af5Cf5E2wwwkbnl | |
// 5L2g5aW977yM5LiW55WMK+OBguOBhC/jgYbjgYjjgYpAeHh4LmNvbQ== | |
// 5L2g5aW977yM5LiW55WMK-OBguOBhC_jgYbjgYjjgYpAeHh4LmNvbQ | |
// <div class='hello'>div content</div> | |
// <lily & lucy > | |
// http%3A%2F%2Flocalhost%3A8080%2Fapp | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
* Copyright (c) 2005, 2014 springside.github.io | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
*******************************************************************************/ | |
package org.xxx.utils; | |
import java.io.UnsupportedEncodingException; | |
import java.net.URLDecoder; | |
import java.net.URLEncoder; | |
import org.apache.commons.codec.DecoderException; | |
import org.apache.commons.codec.binary.Base64; | |
import org.apache.commons.codec.binary.Hex; | |
import org.apache.commons.lang3.StringEscapeUtils; | |
/** | |
* 封装各种格式的编码解码工具类. | |
* | |
* 1.Commons-Codec的 hex/base64 编码 | |
* 2.自制的base62 编码 | |
* 3.Commons-Lang的xml/html escape | |
* 4.JDK提供的URLEncoder | |
* | |
* @author calvin | |
*/ | |
public class Encodes { | |
private static final String DEFAULT_URL_ENCODING = "UTF-8"; | |
private static final char[] BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); | |
/** | |
* Hex编码. | |
*/ | |
public static String encodeHex(byte[] input) { | |
return Hex.encodeHexString(input); | |
} | |
/** | |
* Hex解码. | |
*/ | |
public static byte[] decodeHex(String input) { | |
try { | |
return Hex.decodeHex(input.toCharArray()); | |
} catch (DecoderException e) { | |
throw Exceptions.unchecked(e); | |
} | |
} | |
/** | |
* Base64编码. | |
*/ | |
public static String encodeBase64(byte[] input) { | |
return Base64.encodeBase64String(input); | |
} | |
/** | |
* Base64编码, URL安全(将Base64中的URL非法字符'+'和'/'转为'-'和'_', 见RFC3548). | |
*/ | |
public static String encodeUrlSafeBase64(byte[] input) { | |
return Base64.encodeBase64URLSafeString(input); | |
} | |
/** | |
* Base64解码. | |
*/ | |
public static byte[] decodeBase64(String input) { | |
return Base64.decodeBase64(input); | |
} | |
/** | |
* Base62编码。 | |
*/ | |
public static String encodeBase62(byte[] input) { | |
char[] chars = new char[input.length]; | |
for (int i = 0; i < input.length; i++) { | |
chars[i] = BASE62[(input[i] & 0xFF) % BASE62.length]; | |
} | |
return new String(chars); | |
} | |
/** | |
* Html 转码. | |
*/ | |
public static String escapeHtml(String html) { | |
return StringEscapeUtils.escapeHtml4(html); | |
} | |
/** | |
* Html 解码. | |
*/ | |
public static String unescapeHtml(String htmlEscaped) { | |
return StringEscapeUtils.unescapeHtml4(htmlEscaped); | |
} | |
/** | |
* Xml 转码. | |
*/ | |
public static String escapeXml(String xml) { | |
return StringEscapeUtils.escapeXml11(xml); | |
} | |
/** | |
* Xml 解码. | |
*/ | |
public static String unescapeXml(String xmlEscaped) { | |
return StringEscapeUtils.unescapeXml(xmlEscaped); | |
} | |
/** | |
* URL 编码, Encode默认为UTF-8. | |
*/ | |
public static String urlEncode(String part) { | |
try { | |
return URLEncoder.encode(part, DEFAULT_URL_ENCODING); | |
} catch (UnsupportedEncodingException e) { | |
throw Exceptions.unchecked(e); | |
} | |
} | |
/** | |
* URL 解码, Encode默认为UTF-8. | |
*/ | |
public static String urlDecode(String part) { | |
try { | |
return URLDecoder.decode(part, DEFAULT_URL_ENCODING); | |
} catch (UnsupportedEncodingException e) { | |
throw Exceptions.unchecked(e); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
* Copyright (c) 2005, 2014 springside.github.io | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
*******************************************************************************/ | |
package org.xxx.utils; | |
import java.io.PrintWriter; | |
import java.io.StringWriter; | |
/** | |
* 关于异常的工具类. | |
* | |
* 参考了guava的Throwables。 | |
* | |
* @author calvin | |
*/ | |
public class Exceptions { | |
/** | |
* 将CheckedException转换为UncheckedException. | |
*/ | |
public static RuntimeException unchecked(Throwable ex) { | |
if (ex instanceof RuntimeException) { | |
return (RuntimeException) ex; | |
} else { | |
return new RuntimeException(ex); | |
} | |
} | |
/** | |
* 将ErrorStack转化为String. | |
*/ | |
public static String getStackTraceAsString(Throwable ex) { | |
StringWriter stringWriter = new StringWriter(); | |
ex.printStackTrace(new PrintWriter(stringWriter)); | |
return stringWriter.toString(); | |
} | |
/** | |
* 获取组合本异常信息与底层异常信息的异常描述, 适用于本异常为统一包装异常类,底层异常才是根本原因的情况。 | |
*/ | |
public static String getErrorMessageWithNestedException(Throwable ex) { | |
Throwable nestedException = ex.getCause(); | |
return new StringBuilder().append(ex.getMessage()).append(" nested exception is ") | |
.append(nestedException.getClass().getName()).append(":").append(nestedException.getMessage()) | |
.toString(); | |
} | |
/** | |
* 获取异常的Root Cause. | |
*/ | |
public static Throwable getRootCause(Throwable ex) { | |
Throwable cause; | |
while ((cause = ex.getCause()) != null) { | |
ex = cause; | |
} | |
return ex; | |
} | |
/** | |
* 判断异常是否由某些底层的异常引起. | |
*/ | |
public static boolean isCausedBy(Exception ex, Class<? extends Exception>... causeExceptionClasses) { | |
Throwable cause = ex; | |
while (cause != null) { | |
for (Class<? extends Exception> causeClass : causeExceptionClasses) { | |
if (causeClass.isInstance(cause)) { | |
return true; | |
} | |
} | |
cause = cause.getCause(); | |
} | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment