| import android.os.Build; | |
| import android.text.Html; | |
| import android.util.Base64; | |
| import java.io.UnsupportedEncodingException; | |
| import java.net.URLDecoder; | |
| import java.net.URLEncoder; | |
| /** | |
| * <pre> | |
| * author: Blankj | |
| * blog : http://blankj.com | |
| * time : 2016/8/7 | |
| * desc : 编码解码相关工具类 | |
| * </pre> | |
| */ | |
| public final class EncodeUtils { | |
| private EncodeUtils() { | |
| throw new UnsupportedOperationException("u can't instantiate me..."); | |
| } | |
| /** | |
| * URL编码 | |
| * <p>若想自己指定字符集,可以使用{@link #urlEncode(String input, String charset)}方法</p> | |
| * | |
| * @param input 要编码的字符 | |
| * @return 编码为UTF-8的字符串 | |
| */ | |
| public static String urlEncode(String input) { | |
| return urlEncode(input, "UTF-8"); | |
| } | |
| /** | |
| * URL编码 | |
| * <p>若系统不支持指定的编码字符集,则直接将input原样返回</p> | |
| * | |
| * @param input 要编码的字符 | |
| * @param charset 字符集 | |
| * @return 编码为字符集的字符串 | |
| */ | |
| public static String urlEncode(String input, String charset) { | |
| try { | |
| return URLEncoder.encode(input, charset); | |
| } catch (UnsupportedEncodingException e) { | |
| return input; | |
| } | |
| } | |
| /** | |
| * URL解码 | |
| * <p>若想自己指定字符集,可以使用 {@link #urlDecode(String input, String charset)}方法</p> | |
| * | |
| * @param input 要解码的字符串 | |
| * @return URL解码后的字符串 | |
| */ | |
| public static String urlDecode(String input) { | |
| return urlDecode(input, "UTF-8"); | |
| } | |
| /** | |
| * URL解码 | |
| * <p>若系统不支持指定的解码字符集,则直接将input原样返回</p> | |
| * | |
| * @param input 要解码的字符串 | |
| * @param charset 字符集 | |
| * @return URL解码为指定字符集的字符串 | |
| */ | |
| public static String urlDecode(String input, String charset) { | |
| try { | |
| return URLDecoder.decode(input, charset); | |
| } catch (UnsupportedEncodingException e) { | |
| return input; | |
| } | |
| } | |
| /** | |
| * Base64编码 | |
| * | |
| * @param input 要编码的字符串 | |
| * @return Base64编码后的字符串 | |
| */ | |
| public static byte[] base64Encode(String input) { | |
| return base64Encode(input.getBytes()); | |
| } | |
| /** | |
| * Base64编码 | |
| * | |
| * @param input 要编码的字节数组 | |
| * @return Base64编码后的字符串 | |
| */ | |
| public static byte[] base64Encode(byte[] input) { | |
| return Base64.encode(input, Base64.NO_WRAP); | |
| } | |
| /** | |
| * Base64编码 | |
| * | |
| * @param input 要编码的字节数组 | |
| * @return Base64编码后的字符串 | |
| */ | |
| public static String base64Encode2String(byte[] input) { | |
| return Base64.encodeToString(input, Base64.NO_WRAP); | |
| } | |
| /** | |
| * Base64解码 | |
| * | |
| * @param input 要解码的字符串 | |
| * @return Base64解码后的字符串 | |
| */ | |
| public static byte[] base64Decode(String input) { | |
| return Base64.decode(input, Base64.NO_WRAP); | |
| } | |
| /** | |
| * Base64解码 | |
| * | |
| * @param input 要解码的字符串 | |
| * @return Base64解码后的字符串 | |
| */ | |
| public static byte[] base64Decode(byte[] input) { | |
| return Base64.decode(input, Base64.NO_WRAP); | |
| } | |
| /** | |
| * Base64URL安全编码 | |
| * <p>将Base64中的URL非法字符�?,/=转为其他字符, 见RFC3548</p> | |
| * | |
| * @param input 要Base64URL安全编码的字符串 | |
| * @return Base64URL安全编码后的字符串 | |
| */ | |
| public static byte[] base64UrlSafeEncode(String input) { | |
| return Base64.encode(input.getBytes(), Base64.URL_SAFE); | |
| } | |
| /** | |
| * Html编码 | |
| * | |
| * @param input 要Html编码的字符串 | |
| * @return Html编码后的字符串 | |
| */ | |
| public static String htmlEncode(CharSequence input) { | |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | |
| return Html.escapeHtml(input); | |
| } else { | |
| // 参照Html.escapeHtml()中代码 | |
| StringBuilder out = new StringBuilder(); | |
| for (int i = 0, len = input.length(); i < len; i++) { | |
| char c = input.charAt(i); | |
| if (c == '<') { | |
| out.append("<"); | |
| } else if (c == '>') { | |
| out.append(">"); | |
| } else if (c == '&') { | |
| out.append("&"); | |
| } else if (c >= 0xD800 && c <= 0xDFFF) { | |
| if (c < 0xDC00 && i + 1 < len) { | |
| char d = input.charAt(i + 1); | |
| if (d >= 0xDC00 && d <= 0xDFFF) { | |
| i++; | |
| int codepoint = 0x010000 | (int) c - 0xD800 << 10 | (int) d - 0xDC00; | |
| out.append("&#").append(codepoint).append(";"); | |
| } | |
| } | |
| } else if (c > 0x7E || c < ' ') { | |
| out.append("&#").append((int) c).append(";"); | |
| } else if (c == ' ') { | |
| while (i + 1 < len && input.charAt(i + 1) == ' ') { | |
| out.append(" "); | |
| i++; | |
| } | |
| out.append(' '); | |
| } else { | |
| out.append(c); | |
| } | |
| } | |
| return out.toString(); | |
| } | |
| } | |
| /** | |
| * Html解码 | |
| * | |
| * @param input 待解码的字符串 | |
| * @return Html解码后的字符串 | |
| */ | |
| @SuppressWarnings("deprecation") | |
| public static CharSequence htmlDecode(String input) { | |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | |
| return Html.fromHtml(input, Html.FROM_HTML_MODE_LEGACY); | |
| } else { | |
| return Html.fromHtml(input); | |
| } | |
| } | |
| } |
编码解码相关→EncodeUtils
最新推荐文章于 2021-05-06 12:34:27 发布
本文介绍了一个用于处理编码解码任务的工具类,包括URL编码与解码、Base64编码与解码、HTML编码与解码等功能。适用于Android平台。
8432

被折叠的 条评论
为什么被折叠?



