11# 编码解码相关
22``` java
3+ import android.os.Build ;
4+ import android.text.Html ;
5+ import android.util.Base64 ;
6+
37import java.io.UnsupportedEncodingException ;
48import java.net.URLDecoder ;
59import java.net.URLEncoder ;
@@ -19,57 +23,153 @@ public class EncodeUtils {
1923 }
2024
2125 /**
22- * 以UTF-8编码字符串
23- * <p >若想自己指定字符集,可以使用encode (String string , String charset)方法</p>
26+ * URL编码
27+ * <p >若想自己指定字符集,可以使用{ @link #urlEncode (String input , String charset)} 方法</p>
2428 *
25- * @param string 要编码的字符
29+ * @param input 要编码的字符
2630 * @return 编码为UTF-8的字符串
2731 */
28- public static String encodeUTF8 (String string ) {
29- return encode(string , " UTF-8" );
32+ public static String urlEncode (String input ) {
33+ return urlEncode(input , " UTF-8" );
3034 }
3135
3236 /**
33- * 字符编码
34- * <p >若系统不支持指定的编码字符集,则直接将string原样返回 </p>
37+ * URL编码
38+ * <p >若系统不支持指定的编码字符集,则直接将input原样返回 </p>
3539 *
36- * @param string 要编码的字符
40+ * @param input 要编码的字符
3741 * @param charset 字符集
3842 * @return 编码为字符集的字符串
3943 */
40- public static String encode (String string , String charset ) {
44+ public static String urlEncode (String input , String charset ) {
4145 try {
42- return URLEncoder . encode(string , charset);
46+ return URLEncoder . encode(input , charset);
4347 } catch (UnsupportedEncodingException e) {
44- return string ;
48+ return input ;
4549 }
4650 }
4751
4852 /**
49- * 以UTF-8解码字符串
50- * <p >若想自己指定字符集,可以使用# {decode (String string , String charset)}方法</p>
53+ * URL解码
54+ * <p >若想自己指定字符集,可以使用 { @link #urlDecode (String input , String charset) }方法</p>
5155 *
52- * @param string 要解码的字符
53- * @return 解码为UTF-8的字符串
56+ * @param input 要解码的字符串
57+ * @return URL解码后的字符串
5458 */
55- public static String decodeUTF8 (String string ) {
56- return decode(string , " UTF-8" );
59+ public static String urlDecode (String input ) {
60+ return urlDecode(input , " UTF-8" );
5761 }
5862
5963 /**
60- * 字符解码
61- * <p >若系统不支持指定的解码字符集,则直接将string原样返回 </p>
64+ * URL解码
65+ * <p >若系统不支持指定的解码字符集,则直接将input原样返回 </p>
6266 *
63- * @param string 要解码的字符
67+ * @param input 要解码的字符串
6468 * @param charset 字符集
65- * @return 解码为字符集的字符串
69+ * @return URL解码为指定字符集的字符串
6670 */
67- public static String decode (String string , String charset ) {
71+ public static String urlDecode (String input , String charset ) {
6872 try {
69- return URLDecoder . decode(string , charset);
73+ return URLDecoder . decode(input , charset);
7074 } catch (UnsupportedEncodingException e) {
71- return string;
75+ return input;
76+ }
77+ }
78+
79+ /**
80+ * Base64编码
81+ *
82+ * @param input 要编码的字符串
83+ * @return Base64编码后的字符串
84+ */
85+ public static String base64Encode (String input ) {
86+ return base64Encode(input. getBytes());
87+ }
88+
89+ /**
90+ * Base64编码
91+ *
92+ * @param input 要编码的字节数组
93+ * @return Base64编码后的字符串
94+ */
95+ public static String base64Encode (byte [] input ) {
96+ return Base64 . encodeToString(input, Base64 . DEFAULT );
97+ }
98+
99+ /**
100+ * Base64解码
101+ *
102+ * @param input 要解码的字符串
103+ * @return Base64解码后的字符串
104+ */
105+ public static String base64Decode (String input ) {
106+ return new String (Base64 . decode(input, Base64 . DEFAULT ));
107+ }
108+
109+ /**
110+ * Base64URL安全编码
111+ * <p >将Base64中的URL非法字符�?,/=转为其他字符, 见RFC3548</p>
112+ *
113+ * @param input 要Base64URL安全编码的字符串
114+ * @return Base64URL安全编码后的字符串
115+ */
116+ public static String base64UrlSafeEncode (String input ) {
117+ return Base64 . encodeToString(input. getBytes(), Base64 . URL_SAFE );
118+ }
119+
120+ /**
121+ * Html编码
122+ *
123+ * @param input 要Html编码的字符串
124+ * @return Html编码后的字符串
125+ */
126+ public static String htmlEncode (String input ) {
127+ if (Build . VERSION. SDK_INT >= Build . VERSION_CODES. JELLY_BEAN ) {
128+ return Html . escapeHtml(input);
129+ } else {
130+ // 参照Html.escapeHtml()中代码
131+ StringBuilder out = new StringBuilder ();
132+ for (int i = 0 , len = input. length(); i < len; i++ ) {
133+ char c = input. charAt(i);
134+ if (c == ' <' ) {
135+ out. append(" <" );
136+ } else if (c == ' >' ) {
137+ out. append(" >" );
138+ } else if (c == ' &' ) {
139+ out. append(" &" );
140+ } else if (c >= 0xD800 && c <= 0xDFFF ) {
141+ if (c < 0xDC00 && i + 1 < len) {
142+ char d = input. charAt(i + 1 );
143+ if (d >= 0xDC00 && d <= 0xDFFF ) {
144+ i++ ;
145+ int codepoint = 0x010000 | (int ) c - 0xD800 << 10 | (int ) d - 0xDC00 ;
146+ out. append(" &#" ). append(codepoint). append(" ;" );
147+ }
148+ }
149+ } else if (c > 0x7E || c < ' ' ) {
150+ out. append(" &#" ). append((int ) c). append(" ;" );
151+ } else if (c == ' ' ) {
152+ while (i + 1 < len && input. charAt(i + 1 ) == ' ' ) {
153+ out. append(" " );
154+ i++ ;
155+ }
156+ out. append(' ' );
157+ } else {
158+ out. append(c);
159+ }
160+ }
161+ return out. toString();
72162 }
73163 }
164+
165+ /**
166+ * Html解码
167+ *
168+ * @param input 待解码的字符串
169+ * @return Html解码后的字符串
170+ */
171+ public static String htmlDecode (String input ) {
172+ return Html . fromHtml(input). toString();
173+ }
74174}
75175```
0 commit comments